caching: Expires takes precedence over max-age

Maxim Dounin mdounin at
Fri Aug 2 12:00:45 UTC 2013


On Thu, Aug 01, 2013 at 03:59:45AM -0400, hippo wrote:

> Hello, I have a trouble with nginx caching pages it shouldn't cache. I have
> uwsgi_cache enabled:
> uwsgi_cache_path /tmp/cache levels=1:2 keys_zone=django:1m;
> location /test {
>     uwsgi_pass unix:/tmp/uwsgi.sock;
>     uwsgi_cache django;
> }
> nginx caches responses that have Expires header set in the future, even if
> Cache-Control says otherwise:
> Expires: Fri, 02 Aug 2013 19:47:42 GMT
> Cache-Control: no-cache, must-revalidate, max-age=0
> And rfc2616 says:
> Note: if a response includes a Cache-Control field with the max-
> age directive (see section 14.9.3), that directive overrides the
> Expires field.
> Happens on nginx 1.2.1 and 1.4.1. If I add "uwsgi_ignore_headers Expires;"
> to the nginx conf, the pages don't get cached. Is there something wrong with
> my nginx or uwsgi response headers?

As of now nginx treats both Expires and "Cache-Control: max-age" 
with equal precedence, and uses whichever comes first.  
X-Accel-Expires takes precedence over both of them.

Maxim Dounin

More information about the nginx mailing list