Since my last post on using Nginx to cache proxied content, they have added proper cache handling via their proxy_cache* directives. These are much more suitable for use, as they capture the HTTP response headers and also use more advanced Cache-Control checks.
To start, install the latest stable Nginx avaliable at http://wiki.nginx.org/NginxInstall.
Next edit your nginx.conf and add the proxy_cache_path directive to define a named cache storage. These are independant of servers and locations, and can be reused inside each later on.
... http { ... proxy_cache_path /var/cache/nginx keys_zone=anonymous:10m; include vhosts/*.conf }
Next create the directory for the cache:
mkdir -p /var/cache/nginx
Next define your server configuration, which can be done for example in conf/vhosts/example.com.conf if you defined the include above.
server { listen 80; servername example.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; location / { proxy_pass http://localhost:8080/; proxy_cache anonymous; } # don't cache admin folder, send all requests through the proxy location /admin { proxy_pass http://localhost:8080/; } # handle static files directly. Set their expiry time to max, so they'll # always use the browser cache after first request location ~* (css|js|png|jpe?g|gif|ico)$ { root /var/www/${host}/http; expires max; } }
As we don’t want the nginx worker processes to have root permissions when in use, add to the start of conf/nginx.conf:
user nginx ...
Then sort out the user and permissions:
useradd nginx chown nginx:nginx /var/cache/nginx /usr/local/nginx/{fastcgi_temp,logs,proxy_temp}
To start nginx on bootup, add the following to the end of /etc/rc.local:
/usr/local/nginx/sbin/nginx
Then also run this command to start nginx now.
That is all that is needed, no patches this time. There are several more proxy_cache* directives avaliable that you can use to tweak its behaviour, see the proxy module documentation for more details.