Welcome! Log In Create A New Profile

Advanced

Поддержка Range в subrequest

January 22, 2014 03:45AM
Добрый день.



Разбирался с одной проблемой производительности и обнаружил, что nginx не умеет читать части файлов (то есть не поддерживает range) в subrequest'ах.

Например, если запрашивать файл напрямую, то читается только запрошенный участок файла:
curl --header "Range: bytes=20000-21000" http://localhost:8081/largefile.txt
open("/home/...../largefile.txt", O_RDONLY|O_NONBLOCK) = 13
fstat(13, {st_mode=S_IFREG|0644, st_size=10485760, ...}) = 0
pread(13, "G\2220cT+>\214r\0056\321#\202k\6\215\36\214\32\34X\267\350\302r\242\275\311\6\203f"..., 1001, 20000) = 1001

Но, если я обращаюсь к файлу из модуля с помощью subrequest, то читается всегда весь файл:
curl --header "Range: bytes=20000-21000" http://localhost:8081/subrequest.txt
open("/home/.../largefile.txt", O_RDONLY|O_NONBLOCK) = 13
fstat(13, {st_mode=S_IFREG|0644, st_size=10485760, ...}) = 0
pread(13, "\210\336\212k3\355g\nOH\"0\20\3152\265\v4\25\253\21\2U/\234!\257\331Uh\350\245"..., 32768, 0) = 32768
pread(13, "\32\310\270>\245K\21\271\230\235\230\345\35]=\266@q\373}\204\367.\352\355i\224\215d\200\322\37"..., 32768, 32768)
итд


В коде ngx_http_range_filter_module есть явная проверка, не subrequest ли обрабатывается и если да, то передаётся следующему фильтру:
if (r->http_version < NGX_HTTP_VERSION_10
|| r->headers_out.status != NGX_HTTP_OK
|| r != r->main
|| r->headers_out.content_length_n == -1
|| !r->allow_ranges)
{
return ngx_http_next_header_filter(r);
}


То есть это не баг, а осознанное решение. Но вот чем оно вызвано? Беглое чтение кода не прояснило ничего.
Subject Author Posted

Поддержка Range в subrequest

akashihi January 22, 2014 03:45AM

Re: Поддержка Range в subrequest

Igor Sysoev January 22, 2014 03:56AM

Re: Поддержка Range в subrequest

akashihi January 22, 2014 04:41AM

Re: Поддержка Range в subrequest

Maxim Dounin January 22, 2014 06:28AM

Re: Поддержка Range в subrequest

romandilt April 02, 2014 07:09AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 285
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready