Nginx http proxy caching
malayter at gmail.com
Tue May 11 01:55:03 MSD 2010
On Mon, May 10, 2010 at 2:15 PM, Igor Sysoev <igor at sysoev.ru> wrote:
> On Mon, May 10, 2010 at 03:02:09PM -0400, Jim Ursetto wrote:
>> Vinay Y S Wrote:
>> > Hi,
>> > Is there developer documentation on how http
>> > caching works in nginx? I'm
>> > seeing weird caching behavior where it's caching
>> > responses with Cache-Control: private headers.
>> nginx completely ignores the `private` keyword and
>> will cache your document regardless.
>> > As I've asked in another thread, I'm also trying
>> > to understand how I can
>> > enable/disable caching per request based on a
>> > cookie or a header set by
>> > upstream server.
>> You can send `Cache-control: max-age=0` or
>> `Cache-control: no-cache` to disable nginx proxy cache.
>> Note that because `private` is ignored, you cannot tell
>> nginx to not use the proxy cache while still allowing
>> the browser to cache (for example,
>> `Cache-control: max-age=3600, private`). You can only
>> disable the proxy cache in the configuration file based
>> on the current Location. I don't really understand this
>> behavior; I think private should be honored.
> You are right, "private" should be ignored.
> However, you may say nginx "X-Accel-Expires: 0" to not cache such
> responses. You may say different cache times for nginx and
> browsers/transit proxies:
> X-Accel-Expires: 500
> Cache-Control: max-age=100
Ach... is this really true? It is a fundamental HTTP spec violation to
ignore "private" cache-control directives in a proxy (even a reverse
proxy I would think).
It says in the documentation that it will obey cache-control headers here:
Is the documentation incorrect? Are "private", "no-transform",
,"proxy-revalidate", and other such headers are ignored by nginx? I
just introduced caching into our QA environment for a whole site,
expecting sane behavior on the part of nginx. I guess I better do some
multi-user testing or roll it back out of caution...
More information about the nginx