Need help setting up cache for failover

I’m trying to configure my sites to failover to fastcgi_cache when
are unavailable – but at the same time I want to return nginx errors
(hiding backend errors)

Here’s a simplified version of my current config:

fastcgi_cache_path /dev/shm/nginx_fastcgi_cache levels=1:2
keys_zone=mycache:100m max_size=5000m;
fastcgi_cache_use_stale error http_500 http_503 timeout updating;
fastcgi_cache_valid 200 5m;
fastcgi_cache_valid 404 1m;
proxy_intercept_errors on;
server {
root /var/www/;
location / {
try_files $uri @hhvm_backends;
location @hhvm_backends {
fastcgi_pass backend-nodes; # upstream hhvm backends
fastcgi_cache mycache;

error_page 404 @404;
error_page 500 @500;
location @404 { echo “404: file not found!”; }
location @500 { return 500; } # default nginx error page

Right now, if the server is down and location is stale in cache, I get
default nginx 500 error page.
According to debug log, the problem with this one is that error_page
handling takes over before fastcgi_cache_use_stale has a chance to do

Is there an easy way to fix this?


Posted at Nginx Forum:,255298,255298#msg-255298

I am; that was a copy/paste error. The original config is around 3000
it was easier to type & copy/paste than cleaning up unnecessary lines.


B.R. Wrote:

keys_zone=mycache:100m max_size=5000m;
location @hhvm_backends {

nginx mailing list
[email protected]

Posted at Nginx Forum:,255298,255307#msg-255307

Quick quesiton; I see you are using proxy_intercept_errors. Should not
be using fastcgi_intercept_errors

B. R.

I notice error_page is used at server level while
is at http level. error_page has thus higher precedence than the last. I
would give a shot at putting both at the same level and see what

I trust error_page is some kind of ‘last resort’ feature, handling an
which is considered as such. Since fastcgi_cache_use_stale might
on errors coming from the backend, I would say it should filter them
they are considered by nginx as an error (and thus being processed as
as the *_intercept_errors directive do).

So the only reason I see error_page being triggered before
fastcgi_cache_use_stale would be the higher precedence of the server
environment over the http one. Test, test, test. :o)

B. R.