<div dir="ltr"># HG changeset patch                                                            <br># User Sangdeuk Kwon <<a href="mailto:sangdeuk.kwon@quantil.com">sangdeuk.kwon@quantil.com</a>>                                <br># Date 1595481798 -32400                                                        <br>#      Thu Jul 23 14:23:18 2020 +0900                                           <br># Node ID 90e5ccf7c229322079ba1b61b4241ed69dfc09b2                              <br># Parent  4f30f75dbdf33d6fae9e70086e0df5cbab7db027                              <br>During background update, nginx can't add "Range" header                        <br>                                                                                <br>If the configuration is "slice enabled" and "proxy_cache_use_stale updating"    <br>and "proxy_cache_background_update on",                                         <br>nginx can't get "$slice_range" value during background update.                  <br>nginx sends request to upstream without "Range" header.                         <br>The re-fetched content is saved by cache key of absent "$slice_range".          <br>So, nginx always serves stale content even though after re-fetching new content.<br>                                                                                <br>slice 1k;                                                                       <br>proxy_cache_use_stale updating;                                                 <br>proxy_cache_background_update on;                                               <br>proxy_cache_key "$host$uri[$slice_range]                                        <br>                                                                                <br>diff -r 4f30f75dbdf3 -r 90e5ccf7c229 src/http/modules/ngx_http_slice_filter_module.c<br>--- a/src/http/modules/ngx_http_slice_filter_module.c   Tue Jul 21 20:34:29 2020 +0300<br>+++ b/src/http/modules/ngx_http_slice_filter_module.c   Thu Jul 23 14:23:18 2020 +0900<br>@@ -400,9 +400,12 @@                                                            <br>     ngx_http_slice_loc_conf_t  *slcf;                                          <br>                                                                                <br>     ctx = ngx_http_get_module_ctx(r, ngx_http_slice_filter_module);            <br>+    if (r->background && r != r->main && r->main != r->parent) {               <br>+        ctx = ngx_http_get_module_ctx(r->parent, ngx_http_slice_filter_module);<br>+    }                                                                          <br>                                                                                <br>     if (ctx == NULL) {                                                         <br>-        if (r != r->main || r->headers_out.status) {                           <br>+        if ((r != r->main && !r->background) || r->headers_out.status) {       <br>             v->not_found = 1;                                                  <br>             return NGX_OK;                                                     <br>         }<br><div><br></div></div>