[PATCH] skip apply "ngx_http_upstream_process_accel_expires" when a request responeded by cache

Maxim Dounin mdounin at mdounin.ru
Mon Jun 22 10:37:49 UTC 2020


Hello!

On Mon, Jun 22, 2020 at 05:09:16PM +0900, Sokichi Takada wrote:

> > The cache validity time as obtained from cached responses is used
> > while processing 304 responses during cache revalidation, so the
> > suggested change looks wrong to me.
> 
> When processing 304 responses during cache revalidation,
> ngx_http_upstream_process_accel_expires is called twice.
> 
> 1st time, in "ngx_http_upstream_process_header" function.
> src/http/ngx_http_upstream.c: 2387         rc = u->process_header(r);
> #  process_header = ngx_http_upstream_process_accel_expires
> 
> This calculates the exact valid_sec value by x-accel-expires of upstream's
> response,  It doesn't use a value of the cache data.
> Also, the r->cached is 0 at this time.
> 
> 2nd time, in "ngx_http_upstream_process_header" ->
> "ngx_http_upstream_test_next" -> "ngx_http_upstream_cache_send" function.
> src/http/ngx_http_upstream.c: 2423         if
> (ngx_http_upstream_test_next(r, u) == NGX_OK)    ->
> src/http/ngx_http_upstream.c: 2535         rc =
> ngx_http_upstream_cache_send(r, u);                  ->
> src/http/ngx_http_upstream.c: 1073     rc = u->process_header(r);
> 
> This calculates unnecessary valid_sec value by x-accel-expires of the cache
> data.
> Also, this calculation can skip by this patch since the r->cached is 1 at
> this time.
> 
> Please look into ngx_http_upstream_test_next.
> It keeps the valid_sec value of 1st time into "valid" variable at "2523
>     valid = r->cache->valid_sec;".
> After that, it "calls ngx_http_upstream_cache_send", then updates cache
> data with the "valid" variable at "2560             r->cache->valid_sec =
> valid;".

Backend is not required to return cache control headers along with 
the 304 response.  If it doesn't - nginx uses the headers returned 
in the cached response.

-- 
Maxim Dounin
http://mdounin.ru/


More information about the nginx-devel mailing list