<div dir="ltr">Здравтсвуйте.<div><br></div><div>Наткнулся на непонятную проблему при попытке увеличить proxy_cache_min_uses в связке co slice module. При proxy_cache_min_uses 1 все работает корректно.</div><div><br></div><div>Имеется фронтенд на nginx 1.9.11 который проксирует и кеширует видео с нескольких апстримов. Используется slice module. Видео проигрывается спомощью video.js При попытке увеличить proxy_cache_min_uses возникают проблемы с перемоткой:</div><div><br></div><div>Запрос №1:</div><div>Плеер начинает играть видео. Все штатно.</div><div><a href="https://drive.google.com/file/d/0B5-OwnlywJGhY2Rla2RTaVlsd1k/view" target="_blank">https://drive.google.com/file/d/0B5-OwnlywJGhY2Rla2RTaVlsd1k/view</a><br></div><div><br></div><div>Запрос №2:</div><div>Перематываем на произвольную позицию. Браузер делает range-запрос, а получает 200 и полный Content-Length</div><div><a href="https://drive.google.com/file/d/0B5-OwnlywJGhOWZtMTdCYlQ3Z1k/view" target="_blank">https://drive.google.com/file/d/0B5-OwnlywJGhOWZtMTdCYlQ3Z1k/view</a></div><div><br></div><div><div style="font-size:12.8px">Фрагмент debug-лога:</div><div style="font-size:12.8px"><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 accept: <a href="http://10.0.1.1:55552">10.0.1.1:55552</a> fd:16</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 event timer add: 16: 60000:1456391843913</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 reusable connection: 1</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 epoll add event: fd:16 op:1 ev:80002001</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 post event 00007FBC2167F0D0</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 delete posted event 00007FBC2167F0D0</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http wait request handler</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 malloc: 0000000000C357B0:1024</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 recv: fd:16 1009 of 1024</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 reusable connection: 0</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 posix_memalign: 0000000000C35BC0:4096 @16</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http process request line</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http request line: "GET /streams/<a href="http://s1.example.com/0/aa7786d88a1529d6ba636e345415b220.mp4">s1.example.com/0/aa7786d88a1529d6ba636e345415b220.mp4</a> HTTP/1.1"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http uri: "/streams/<a href="http://s1.example.com/0/aa7786d88a1529d6ba636e345415b220.mp4">s1.example.com/0/aa7786d88a1529d6ba636e345415b220.mp4</a>"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http args: ""</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http exten: "mp4"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 posix_memalign: 0000000000C280C0:4096 @16</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http process request header line</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http header: "Host: <a href="http://cache.example.com">cache.example.com</a>"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http header: "Connection: keep-alive"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http header: "Accept-Encoding: identity;q=1, *;q=0"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http header: "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http header: "Accept: */*"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http header: "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4,bg;q=0.2"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http header: "Cookie:</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http header: "Range: bytes=696653667-1993091904"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http header: "If-Range: Sun, 07 Feb 2016 12:46:26 GMT"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http header done</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 event timer del: 16: 1456391843913</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 generic phase: 0</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 rewrite phase: 1</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 test location: "/streams/"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 test location: ~ "^/streams/(?<upstream_hostname>[^/]+)/(?<upstream_uri>.*)$"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http regex set $upstream_hostname to "<a href="http://s1.example.com">s1.example.com</a>"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http regex set $upstream_uri to "0/aa7786d88a1529d6ba636e345415b220.mp4"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 using configuration "^/streams/(?<upstream_hostname>[^/]+)/(?<upstream_uri>.*)$"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http cl:-1 max:1048576</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 rewrite phase: 3</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script var</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http map started</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script var: "<a href="http://s1.example.com">s1.example.com</a>"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http map: "<a href="http://s1.example.com">s1.example.com</a>" "1"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script var: "1"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script value: "0"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script equal</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script equal: no</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script if</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script if: false</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 post rewrite phase: 4</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 generic phase: 5</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 generic phase: 6</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 generic phase: 7</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 access phase: 8</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 access: D52B000A FFFFFFFF D52B000A</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 access phase: 9</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 access phase: 10</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 post access phase: 11</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script copy: "http://"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script var: "<a href="http://s1.example.com">s1.example.com</a>"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script copy: "/"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script var: "0/aa7786d88a1529d6ba636e345415b220.mp4"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script var: ""</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http init upstream, client timer: 0</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 epoll add event: fd:16 op:3 ev:80002005</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script var: "/streams/<a href="http://s1.example.com/0/aa7786d88a1529d6ba636e345415b220.mp4">s1.example.com/0/aa7786d88a1529d6ba636e345415b220.mp4</a>"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http split: 1335405152 4294967295</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script copy: "cache_"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script var: "ssd01"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script var: "<a href="http://s1.example.com">s1.example.com</a>"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script var: "0/aa7786d88a1529d6ba636e345415b220.mp4"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script var: "bytes=0-5242879"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http cache key: "s1.example.com0/aa7786d88a1529d6ba636e345415b220.mp4bytes=0-5242879"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 add cleanup: 0000000000C36B98</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http file cache exists: -2 e:0</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http upstream cache: 8</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 posix_memalign: 0000000000C290D0:4096 @16</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script copy: "Host: "</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script var: "<a href="http://s1.example.com">s1.example.com</a>"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script copy: "</div><div style="font-size:12.8px">"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script copy: "Range: "</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script var: "bytes=0-5242879"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script copy: "</div><div style="font-size:12.8px">"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script copy: "Connection: close</div><div style="font-size:12.8px">"</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script copy: ""</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script copy: ""</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script copy: ""</div><div style="font-size:12.8px">2016/02/25 12:16:23 [debug] 17567#17567: *10 http script copy: ""</div></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Конфиг:</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">proxy_cache_path /disks/ssd01 levels=1:2 keys_zone=cache_ssd01:4m use_temp_path=off inactive=7d max_size=230G;</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">split_clients $request_uri $disk {</div><div style="font-size:12.8px">        100% ssd01;</div><div style="font-size:12.8px">}</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><div>        location /streams/ {</div><div>                location ~ ^/streams/(?<upstream_hostname>[^/]+)/(?<upstream_uri>.*)$ {</div><div>                        if ($allowed = 0) {</div><div>                                return 403;</div><div>                        }</div><div><br></div><div>                        slice 5m;</div><div><br></div><div>                        proxy_pass http://$upstream_hostname/$upstream_uri$is_args$args;</div><div>                        proxy_set_header Host $upstream_hostname;</div><div>                        proxy_set_header Range $slice_range;</div><div>                        proxy_ignore_client_abort on;<br></div><div><br></div><div>                        proxy_cache cache_$disk;</div><div>                        proxy_cache_key $upstream_hostname$upstream_uri$slice_range;</div><div>                        proxy_cache_revalidate on;</div><div><br></div><div>                        proxy_cache_bypass $arg_start;</div><div>                        proxy_no_cache $arg_start;</div><div><br></div><div>                        proxy_cache_lock on;</div><div><br></div><div><br></div><div>                        proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504 http_403;</div><div>                }</div><div>        }</div></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><div># uname -a</div><div>Linux localhost.localdomain 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u3 (2016-01-17) x86_64 GNU/Linux</div></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><div># /usr/sbin/nginx -V</div><div>nginx version: nginx/1.9.11</div><div>built by gcc 4.9.2 (Debian 4.9.2-10)</div><div>built with OpenSSL 1.0.1k 8 Jan 2015</div><div>TLS SNI support enabled</div><div>configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=%{_libdir}/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-threads --with-stream --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,--as-needed' --with-ipv6</div></div></div><div><br></div><div><div><br></div><div>Спасибо.</div><div><br></div>-- <br><div><div dir="ltr">WBR,<br><div>Vadim Lazovskiy</div></div></div>
</div></div>