<div dir="ltr">changeset: Â  7997:86f70e48a64a<br>branch: Â  Â  Â issue-964<br>tag: Â  Â  Â  Â  tip<br>user: Â  Â  Â  Â Yugo Horie <<a href="mailto:yugo-horie@jocdn.co.jp" target="_blank">yugo-horie@jocdn.co.jp</a>><br>date: Â  Â  Â  Â Tue Jan 25 12:16:05 2022 +0900<br>files: Â  Â  Â  src/http/ngx_http_upstream.c src/http/ngx_http_upstream.h<br>description:<br>Prioritize `X-Accel-Expires` than `Cache-Control` and `Expires` (#964)<br><br>We introduce 3 flags that indicate to be overwriting cache control behavior.<br><br>* The `overwrite_noncache` switches on the case of not to be cached when<br>processing `Cache-Control` and `Expires` headers from upstream.<br><br>* The `overwrite_stale_xxx` flags also switch on when it's enabled to use<br>stale cache behavior on processing those headers.<br><br>* `process_accel_expires` watches these flags, which invalidates their non- cache<br>and stale behavior which had been set in other headers to prioritize `X-Accel-Expires`.<br><br>user: Yugo Horie <<a href="mailto:yugo-horie@jocdn.co.jp" target="_blank">yugo-horie@jocdn.co.jp</a>><br>changed src/http/ngx_http_upstream.c<br>changed src/http/ngx_http_upstream.h<br><br><br>diff -r 5d88e2bf92b3 -r 86f70e48a64a src/http/ngx_http_upstream.c<br>--- a/src/http/ngx_http_upstream.c Â  Â  Â Sat Jan 22 00:28:51 2022 +0300<br>+++ b/src/http/ngx_http_upstream.c Â  Â  Â Tue Jan 25 12:16:05 2022 +0900<br>@@ -4747,6 +4747,7 @@<br>  Â  Â  Â  Â || ngx_strlcasestrn(start, last, (u_char *) "private", 7 - 1) != NULL)<br>  Â  Â {<br>  Â  Â  Â  Â u->cacheable = 0;<br>+ Â  Â  Â  Â u->overwrite_noncache = 1;<br>  Â  Â  Â  Â return NGX_OK;<br>  Â  Â }<br><div><br>@@ -4772,11 +4773,13 @@<br>  Â  Â  Â  Â  Â  Â }<br><br>  Â  Â  Â  Â  Â  Â u->cacheable = 0;<br>+ Â  Â  Â  Â  Â  Â u->overwrite_noncache = 1;<br>  Â  Â  Â  Â  Â  Â return NGX_OK;<br>  Â  Â  Â  Â }<br><br>  Â  Â  Â  Â if (n == 0) {<br>  Â  Â  Â  Â  Â  Â u->cacheable = 0;<br>+ Â  Â  Â  Â  Â  Â u->overwrite_noncache = 1;<br>  Â  Â  Â  Â  Â  Â return NGX_OK;<br>  Â  Â  Â  Â }<br><br>@@ -4800,9 +4803,12 @@<br>  Â  Â  Â  Â  Â  Â }<br><br>  Â  Â  Â  Â  Â  Â u->cacheable = 0;<br>+ Â  Â  Â  Â  Â  Â u->overwrite_noncache = 1;<br>  Â  Â  Â  Â  Â  Â return NGX_OK;<br>  Â  Â  Â  Â }<br><br>+ Â  Â  Â  Â u->overwrite_stale_updating = 1;<br>+ Â  Â  Â  Â u->overwrite_stale_error = 1;<br>  Â  Â  Â  Â r->cache->updating_sec = n;<br>  Â  Â  Â  Â r->cache->error_sec = n;<br>  Â  Â }<br>@@ -4822,10 +4828,12 @@<br>  Â  Â  Â  Â  Â  Â  Â  Â continue;<br>  Â  Â  Â  Â  Â  Â }<br><br>+ Â  Â  Â  Â  Â  Â u->overwrite_noncache = 1;<br>  Â  Â  Â  Â  Â  Â u->cacheable = 0;<br>  Â  Â  Â  Â  Â  Â return NGX_OK;<br>  Â  Â  Â  Â }<br></div><div><br>+ Â  Â  Â  Â u->overwrite_stale_error = 1;<br>  Â  Â  Â  Â r->cache->error_sec = n;<br>  Â  Â }<br>  Â  Â }<br></div><div>@@ -4863,6 +4871,7 @@<br>  Â  Â expires = ngx_parse_http_time(h->value.data, h->value.len);<br><br>  Â  Â if (expires == NGX_ERROR || expires < ngx_time()) {<br>+ Â  Â  Â  Â u->overwrite_noncache = 1;<br>  Â  Â  Â  Â u->cacheable = 0;<br>  Â  Â  Â  Â return NGX_OK;<br>  Â  Â }<br>@@ -4897,6 +4906,15 @@<br>  Â  Â if (r->cache == NULL) {<br>  Â  Â  Â  Â return NGX_OK;<br>  Â  Â }<br>+ Â  Â if (u->overwrite_noncache) {<br>+ Â  Â  Â  Â u->cacheable = 1;<br>+ Â  Â }<br>+ Â  Â if (u->overwrite_stale_updating) {<br>+ Â  Â  Â  Â r->cache->updating_sec = 0;<br>+ Â  Â }<br>+ Â  Â if (u->overwrite_stale_error) {<br>+ Â  Â  Â  Â r->cache->error_sec = 0;<br>+ Â  Â }<br><br>  Â  Â len = h->value.len;<br>  Â  Â p = h->value.data;<br></div><div>diff -r 5d88e2bf92b3 -r 86f70e48a64a src/http/ngx_http_upstream.h<br>--- a/src/http/ngx_http_upstream.h Â  Â  Â Sat Jan 22 00:28:51 2022 +0300<br>+++ b/src/http/ngx_http_upstream.h Â  Â  Â Tue Jan 25 12:16:05 2022 +0900<br>@@ -386,6 +386,9 @@<br><br>  Â  Â unsigned Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  store:1;<br>  Â  Â unsigned Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  cacheable:1;<br>+ Â  Â unsigned Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  overwrite_noncache:1;<br>+ Â  Â unsigned Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  overwrite_stale_updating:1;<br>+ Â  Â unsigned Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  overwrite_stale_error:1;<br>  Â  Â unsigned Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  accel:1;<br>  Â  Â unsigned Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  ssl:1;<br> #if (NGX_HTTP_CACHE)<br></div></div>