[NGINX] proxy_cache_use_stale updating and X-Accel-Expires=0

Jérôme Loyet jerome at loyet.net
Wed Jul 21 13:06:26 MSD 2010


I have a strange situation. I don't really know if it's a bug or a feature.

I'm using nginx as a cached reverse proxy to apache/mod_php.

I have the following (simplified) conf:

proxy_cache_use_stale updating error timeout invalid_header http_500
http_502 http_503 http_504;
proxy_cache_key $scheme$host$request_uri$args;
proxy_cache_path /CACHE levels=1:2:2 keys_zone=cache:256m inactive=1d
proxy_no_cache $http_authorization;
proxy_ignore_headers Expires Cache-Control;

upstream backend.www {
    server www0:9001;
    server www1:9001;
    server www2:9001;
    server www3:9001;
    server www4:9001;
    server www5:9001;
    server www6:9001;
    server www7:9001;
    server www8:9001;
    server www9:9001;

server {
  listen 80;
  location / {
    proxy_cache_valid 200 301 302 404 500 5m;
    proxy_cache_valid any 1m;
    proxy_pass http://backend.www;

Some pages returns the X-Accel-Expires=0 header to exclude a page from
the cache. It works great. But sometimes, nginx returns those page
with a 404 response without fetching the page to the backend server.
Those pages are marked as UPDATING in logs.

How a page excluded from the cache can be wrongly (404 instead of 200)
served by the cache with an UPDATING status ?

Here are extracts of my logs.

XXXXXX - - [16/Jul/2010:11:18:36 +0200] "GET
/index_favoris.php?cid=52440 HTTP/1.1" 200 1403
"http://www.foo.bar/cid52440/" "" "4.74" 0.099 X-Accel-Expires=0,200,0.099,MISS <-- it works

XXXXXX - - [16/Jul/2010:11:24:55 +0200] "GET
/index_favoris.php?cid=52440 HTTP/1.0" 404 3076
"http://www.foo.bar/cid52440/" "" "-" 0.000 X-Accel-Expires=-
-,-,-,UPDATING <-- doesn't work

XXXXXX - - [16/Jul/2010:11:32:15 +0200] "GET
/index_favoris.php?cid=52440 HTTP/1.0" 404 3076
"http://www.foo.bar/cid52440/" "" "-" 0.000 X-Accel-Expires=-
-,-,-,UPDATING <-- doesn't work

Thx for your replies

++ Jerome

More information about the nginx mailing list