Value of "Expires" header differ for caching and content serving servers
Maxim Dounin
mdounin at mdounin.ru
Thu Apr 7 16:15:34 MSD 2011
Hello!
On Wed, Apr 06, 2011 at 06:47:10AM -0400, i.s.ivanov2 wrote:
> I have a following servers structure:
> content.server contains an Apache instance, which processes one simple
> PHP script. On the same node Nginx is set as a caching proxy to that
> Apache.
> caching.server contains Nginx with proxy_cache directive, with upstream
> set to content.server
>
> Php script generates an XML file, that has a lifetime of 30 minutes.
> This is achieved by setting headers in PHP code: "Cache-Control:
> max-age=1800", "Date: now()" and "Expires: now()+1800seconds".
>
> content.server serves the cached file correctly:
> > Date Wed, 06 Apr 2011 09:50:49 GMT
> > Cache-Control public, must-revalidate, max-age=1800
> > Expires Wed, 06 Apr 2011 10:14:25 GMT
> > Etag 26ee7051c360ee28d2a5697fb2b97a03
This doesn't actually correct: Cache-Control max-age and Expires disagree.
According to max-age, document should expire at 10:20:49, while
expires set to 10:14:25.
Unless configured to ignore some headers (with
proxy_ignore_headers directive) nginx will use first relevant
header it sees to actually expire cached document, Cache-Control
max-age in this case.
> But approximately half of the time caching.server serves the content
> where Date header is larger than Expires, and Expires is different from
> the one on content.server:
> > Date Wed, 06 Apr 2011 09:49:58 GMT
> > Cache-Control public, must-revalidate, max-age=1800
> > Expires Wed, 06 Apr 2011 09:44:23 GMT
> > Etag 26ee7051c360ee28d2a5697fb2b97a03
>
>
> My questions is: what can cause such behaviour, when caching nginx sets
> its own Expires header?
Value of Expires header is preserved from original request, while
Date is current date on the server. Since document isn't expired
yet (see above), you see Expires in the past.
Maxim Dounin
More information about the nginx
mailing list