proxy_cache_background_update after cache expiry

Maxim Dounin mdounin at mdounin.ru
Wed Apr 5 14:52:29 UTC 2017


Hello!

On Wed, Apr 05, 2017 at 07:32:01AM -0400, IgorR wrote:

> Hello,
> 
> I'm trying to configure nginx to use proxy_cache_background_update but it
> seems like after expiry it still waits for the full roundtrip to the
> backend, returning a MISS in X-Cache-Status. What am I MISSing?
> 
> I'm using nginx 1.11.12 under ubuntu 14.04 running inside docker, but
> hopefully this is too much detail.
> 
> location ~ ^/?(\d+/[^/]+)?/?$
> {
>    expires 20s;
> 
>    proxy_cache app_cache;
>    proxy_cache_lock on;
> 
>    proxy_cache_bypass $http_upgrade;
> 
>    proxy_pass http://172.17.0.2:5000;
>    proxy_http_version 1.1;
>    error_log    /nginxerror.log debug;
> 
>    add_header X-Cache-Status $upstream_cache_status;
> 
>    proxy_cache_use_stale error timeout updating http_500 http_502 http_503
> http_504;
>    proxy_cache_background_update on;
> 
>    break;
> }

"MISS" in $upstream_cache_status indicate that the relevant 
resource is not present in the cache, and therefore there is 
no stale response to return.

Most likely the problem is the resource was never saved to the 
cache, because of the cacheability flags in the response.  
Consider testing if the resource is at all saved to cache, 
the proxy_cache_background_update is certainly irrelevant.

Note that cacheability of a resource is determinded by nginx based 
on multiple factors.  Cache-Control, Expires, X-Accel-Expires, 
Set-Cookie, and Vary response headers affect caching.  If there 
are no response headers which explicitly allow caching and set 
expiration time, only responses with appropriate proxy_cache_valid 
are cached.

For more information see http://nginx.org/r/proxy_cache_valid.

-- 
Maxim Dounin
http://nginx.org/


More information about the nginx mailing list