I’m using nginx as a reverse proxy, but I can’t get nginx to serve
requests
from its cache when the upstream server is refusing connections. I
understood that “proxy_cache_use_stale error” should allow me to do
this,
but it doesn’t seem to work for me. Have I perhaps misunderstood
something?
My complete nginx.conf looks like this:
user www-data;
worker_processes 4;
pid /run/nginx.pid;
On Wed, Dec 10, 2014 at 11:45:26AM -0500, new299 wrote:
I’m using nginx as a reverse proxy, but I can’t get nginx to serve requests
from its cache when the upstream server is refusing connections. I
understood that “proxy_cache_use_stale error” should allow me to do this,
but it doesn’t seem to work for me. Have I perhaps misunderstood something?
You may want to clariy what “doesn’t seem to work for me” means.
What makes you think that it doesn’t work?
On Wed, Dec 10, 2014 at 10:00:25PM -0500, new299 wrote:
When the upstream goes away nginx gives the error “502 Bad Gateway
nginx/1.4.6 (Ubuntu)”. The log contains:
" [error] 2624#0: *48941 connect() failed (111: Connection refused) while
connecting to upstream,"
Rather than serving it from cache as I would expect. It should be cached as
the page was previous returned successfully.
The problem is in the “it should be cached” statement.
There are lots of cases when pages will not be cached even if
returned - for example, because caching is explicitly disabled by
response headers, or just not enabled and/or disabled with
proxy_cache_min_uses, see Ruslan’s answer.
So in your case the response is likely not cached, and that’s
why “proxy_cache_use_stale” doesn’t work for you. To be sure
you can follow Ruslan’s suggestion to look into the cache
directory, or use the $upstream_cache_status variable, see Module ngx_http_upstream_module.
Your config doesn’t have any Module ngx_http_proxy_module
directives. If this is intentional, then your responses should
carry caching information themselves (X-Accel-Expires, Expires,
Cache-Control, Set-Cookie, Vary, see the link above for details)
and otherwise qualify to be cached.
Also, “proxy_cache_min_uses 100” in your config instructs to cache
a response only after it was requested 100 times.
Please first make sure your responses actually get cached by
looking into /data/nginx/cache.
Thanks, I’ve tried this. My amended configuration is below. However, I’m
still getting the same error when the upstream goes away. The cache
directory is now being populated correctly however. Any ideas?
user www-data;
worker_processes 4;
pid /run/nginx.pid;