RSS Amplifier

Luca Corbo – · Sep 21, 2009

Caching Dynamic Content Using Nginx

0
Sign in to vote or save

This page cannot be shown here. You can still read it on the original site — the toolbar below keeps your place in the directory.

If you need a static version of your dynamic web application maybe you may interested to configure Nginx as reverse proxy cache so it can cache also dynamic contents (pages with ? in the URI). Well, if this is your scenario, let’s go to configure Nginx. Requirements Nginx up, running and listening on port 80 A web server, like Apache, listening on port 8080 server { listen 80 ; server_name…

If you need a static version of your dynamic web application maybe you may interested to configure Nginx as reverse proxy cache so it can cache also dynamic contents (pages with ? in the URI).

Well, if this is your scenario, let’s go to configure Nginx.

Requirements

  • Nginx up, running and listening on port 80
  • A web server, like Apache, listening on port 8080
server {
 listen 80;
 server_name www.example.com;

 access_log /var/log/nginx/host.access.log main;
 set $prefix prefix_;

 # proxy module defaults
 proxy_store_access user:rw group:rw all:r;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header Host $host;

 # Main location
 location / {

 root /tmp/nginx/;
 index index.html index.htm index.php index.php.html index.php.html;

 # Use this if you don't cache a context (dont_cache_path) , send all requests through the proxy
 location ~ ^/dont_cache_path {
 proxy_pass http://localhost:8080;
 }

 # if the request uri was a directory, store the index page name
 if ($request_uri ~ /$) {
 set $store_extra ${request_uri}index;
 }

 # set the location the proxy will store the data to. Add the index page
 # name if the uri was a directory (nginx can't normally store these)
 proxy_store /tmp/nginx/${prefix}${query_string}${store_extra}.html;

 # go through the proxy if there is no cache
 if (!-f /tmp/nginx/${prefix}${query_string}${store_extra}.html) {
 proxy_pass http://localhost:8080;
 }

 # workaround. headers module doesn't take into account proxy response
 # headers. It overwrites the proxy Cache-Control header, causing
 # private/no-cache/no-store to be wiped, so only set if not using proxy
 if (-f /tmp/nginx/${request_uri}${store_extra}.html) {
 expires 0;
 }

 # 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|swf)$ {
 root /var/www/html/;
 expires max;
 }
 error_page 404 = /${prefix}${query_string}${store_extra}.html;
 }
}

Restart Nginx and enjoy with your static web site

Reference Links:

Read on /blog/caching-dynamic-content-using-nginx/

Comments

Nothing yet. Say the first thing.

    Sign in to join the conversation.