Hello. I have two nginx instances - let’s call them upstream and
downstream.
Both are running Ubuntu 13.10 64-bit and nginx 1.4.1. I want to use
proxy_store to mirror some rarely-changing files from upstream to
downstream.
On the downstream server, I have created a /var/www directory owned by
www-data (the user configured to run worker nginx processes). All files
are
served out of this directory. The directory (and its sub-dirs) have 755
permissions.
In theory, when I ask for a file from the downstream server, my
understanding is that it should look under /var/www for it; upon not
finding
it, get it from upstream and store it locally in downstream; and then
serve
the file from downstream on an on-going basis. The upstream server
should
only show one access in its access log.
This is not happening. The downstream server keeps complaining that the
file
cannot be found locally, and continually fetches the file from upstream
instead. So each access attempt to downstream for that file generates
one
“no such file or directory” error in the downstream error log, and a
regular
GET in the upstream access log.
If I instead touch a file at the location (as the www-data user) where
nginx
wants to find the file locally on the downstream server; do a GET for
that
file; and then delete the file, nginx will do the right thing (i.e., get
the
file from upstream, store it at that location, and then serve it). If I
skip the GET, nginx continues to not save the file locally, and keeps
getting it each time from upstream.
Any idea what’s going on?
Here’s my downstream server’s config:
upstream download_servers {
server download.foobar.com;
}
server {
listen 80;
server_name www.foobar.com;
location / {
root /var/www;
index index.html;
proxy_redirect off;
}
location /download/ {
root /var/www/download/fetch/;
error_page 404 = /fetch$url;
}
location /fetch/ {
internal;
proxy_store /var/www/download${uri};
proxy_http_version 1.1;
proxy_pass http://download_servers;
proxy_store_access user:rw group:rw all:r;
}
}
Posted at Nginx Forum: