SSI and expires header

Brian Akins brian at
Wed Jul 4 13:10:02 UTC 2012

On Jul 4, 2012, at 5:56 AM, James Lee wrote:
>    location /ssi/ {
>        ssi on;
>        expires 1w;
>        add_header Last-Modified 'not added';
>    }
>    location /ssi-with-last-modified/ {
>        proxy_pass        http://localhost/ssi/;
>        proxy_set_header  Host;
>        add_header Last-Modified 'this works!';
>    }

With this config, every request will actually cause two hits to nginx. 

Last-Modified is removed from SSI in every web server I know because you'd really need to show the last modified time of the newest included element. Also, if there are dynamic elements, how do you handle those?

I did  simple Lua header filter that adds the current time to Last-Modified when needed.  Depending on which browsers you need to support, however, just adding Expires and/or Cache-Control headers is enough to get the browser to cache. I know that not all browsers behave correctly, however.

Something simple like:

header_filter_by_lua '
     ngx.header["Last-Modified"] = ngx.http_time(ngx.time())

Of course, you may want to check to see if it's already been set, only set if a flag is present, etc.

The "proxy to yourself" solution is unacceptable for a busy site.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the nginx mailing list