Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Since enabling the fastcgi_cache on my nginx server, my php-enabled custom error page has suddenly stopped working and I'm getting the internal 404 message instead.

In nginx.conf:

fastcgi_cache_path /var/lib/nginx/fastcgicache levels=1:2 
keys_zone=MYCACHE:5m inactive=2h max_size=1g loader_files=1000
loader_threshold=2000;
map $http_cookie $no_cache { default 0; ~SESS 1; }
fastcgi_cache_key "$scheme$request_method$host$request_uri";
add_header X-My-Cache $upstream_cache_status;

map $uri $no_cache_dirs {
   default 0;
   ~^/(?:phpMyAdmin|rather|poll|webmail|skewed|blogs|galleries|pixcache) 1;
}

the cache relevant stuff in my fastcgi.conf:

fastcgi_cache MYCACHE;
fastcgi_keep_conn on;
fastcgi_cache_bypass $no_cache $no_cache_dirs;
fastcgi_no_cache $no_cache $no_cache_dirs;
fastcgi_cache_valid 200 301 5m;
fastcgi_cache_valid 302 5m;
fastcgi_cache_valid 404 1m;
fastcgi_cache_use_stale error timeout invalid_header updating http_500;
fastcgi_ignore_headers Cache-Control Expires;
expires epoch;
fastcgi_cache_lock on;

If I disable the fastcgi_cache, the php-enabled 404 page works as it has for years.

How would I disable the cache for the custom error page?

share|improve this question
    
just rec'd an email fron Nginx's Igor...will update shortly. –  Ian Oct 9 '12 at 8:43

1 Answer 1

Two suggestions from nginx's Igor:

The issue is in fastcgi_cache_key: fastcgi_cache_key "$scheme$request_method$host$request_uri";

It always uses client original $request_uri. Try: fastcgi_cache_key "$scheme$request_method$host$uri?$args";

making that change got me back to the custom 404, but a cached version. Adding the following location fixed that:

location = /dhe404.shtml {
fastcgi_pass 127.0.0.1:10004;
fastcgi_cache  off;
}
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.