<div dir="ltr"><div>Hi!</div><div><br></div><div>Have a look at the following example first.</div><div><br></div><div><div>server {</div><div>      listen  80;</div><div><br></div><div>      location / {</div><div>          slice 10;</div><div>          proxy_set_header  Range $slice_range;</div><div>          proxy_pass <a href="http://127.0.0.1:81">http://127.0.0.1:81</a>;</div><div>      }</div><div>}</div></div><div><br></div><div><br></div><div>server {</div><div>      listen  81;</div><div>       root  html;</div><div>}</div><div><br></div><div>Then we start a request with curl.</div><div>> curl <a href="http://my.test.com/">http://my.test.com/</a> -x 127.1:80 -H "range: bytes=1-50, 2-51"<br></div><div><br></div><div>We get a response of the whole file that differs from expectation (1-50, 2-51).</div><div><br></div><div>It seems that slice module doesn't support multi-range (separated by commas),</div><div>but it's confused $slice_range variable is valid. </div><div><br></div><div>Please confirm this question and the following patch, thanks!</div><div>    </div><div><br></div><div>diff -r 5e05118678af src/http/modules/ngx_http_slice_filter_module.c</div><div>--- a/src/http/modules/ngx_http_slice_filter_module.c<span class="gmail-Apple-tab-span" style="white-space:pre">   </span>Mon May 29 23:33:38 2017 +0300</div><div>+++ b/src/http/modules/ngx_http_slice_filter_module.c<span class="gmail-Apple-tab-span" style="white-space:pre">    </span>Mon Jun 19 09:35:24 2017 -0400</div><div>@@ -389,6 +389,7 @@</div><div>     ngx_http_variable_value_t *v, uintptr_t data)</div><div> {</div><div>     u_char                     *p;</div><div>+    off_t                      start;</div><div>     ngx_http_slice_ctx_t       *ctx;</div><div>     ngx_http_slice_loc_conf_t  *slcf;</div><div><br></div><div>@@ -407,6 +408,13 @@</div><div>             return NGX_OK;</div><div>         }</div><div><br></div><div>+        start = ngx_http_slice_get_start(r);</div><div>+</div><div>+        if (start == -1) {</div><div>+            v->not_found = 1;</div><div>+            return NGX_OK;</div><div>+        }</div><div>+</div><div>         ctx = ngx_pcalloc(r->pool, sizeof(ngx_http_slice_ctx_t));</div><div>         if (ctx == NULL) {</div><div>             return NGX_ERROR;</div><div>@@ -419,7 +427,7 @@</div><div>             return NGX_ERROR;</div><div>         }</div><div><br></div><div>-        ctx->start = slcf->size * (ngx_http_slice_get_start(r) / slcf->size);</div><div>+        ctx->start = slcf->size * (start / slcf->size);</div><div><br></div><div>         ctx->range.data = p;</div><div>         ctx->range.len = ngx_sprintf(p, "bytes=%O-%O", ctx->start,</div><div>@@ -460,7 +468,7 @@</div><div>     p = h->value.data + 6;</div><div><br></div><div>     if (ngx_strchr(p, ',')) {</div><div>-        return 0;</div><div>+        return -1;</div><div>     }</div><div><br></div><div>     while (*p == ' ') { p++; }</div><div><br></div><div><br></div><div>And this is a better conf.</div><div><br></div><div>map $slice_range  $x_slice_range {</div><div>        default  $http_range;</div><div>        ~           $slice_range;</div><div>}</div><div><br></div><div><div>server {</div><div>      listen  80;</div><div><br></div><div>      location / {</div><div>          slice 10;</div><div>          proxy_set_header  Range $x_slice_range;</div><div>          proxy_pass <a href="http://127.0.0.1:81">http://127.0.0.1:81</a>;</div><div>      }</div><div>}</div></div></div>