При директивах limit_rate_after 150000k; #150Mb limit_rate 2048k; proxy_max_temp_file_size 0; Скачивание происходит так как и ожидается, без обрывов и прочего, а так же обрезается скорость правильным образом в соответствии с директивами limit_rate_after и limit_rate.
Но вот при такой конфигурации: limit_rate_after 150000k; #150Mb limit_rate 2048k; proxy_max_temp_file_size 6144m; Поведение не понятно. При таких параметрах директив работает так - скачивается 150Мб и затем обрыв. Почему? ср, 7 окт. 2020 г. в 18:07, Иван Мишин <simplebo...@gmail.com>: > При директивах > > вт, 6 окт. 2020 г. в 17:16, Maxim Dounin <mdou...@mdounin.ru>: > >> Hello! >> >> On Tue, Oct 06, 2020 at 10:42:47AM +0300, Evgeniy Berdnikov wrote: >> >> > On Mon, Oct 05, 2020 at 10:24:17PM +0300, Alexey wrote: >> > > День добрый! >> > > >> > > Вы качаете файл, получаемых от прокси апстрима? >> > > >> https://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_max_temp_file_size >> > > >> > > Вы упираетесь в 1Гб временного файла. когда качается быстро, он >> > > вообще в темп не пишется, если файл прилетает от апстрима быстрее >> > > чем забираем, то он уже пишется во временный файл. вы успеваете >> > > скачать столько, сколько прилетает до начала записи во временный >> > > файл + макс размер файла. >> > >> > Наличие лимита на размер временного файла это что, повод обрывать >> закачку? >> >> Наличие лимита - ни разу не повод обрывать закачку, nginx её и не >> обрывает. >> >> Другой вопрос, что если буфер забит - nginx'у некуда читать >> дополнительные данные, и в результате бэкенд может закрыть >> соединение по таймауту до того, как содержимое временного файла >> будет отдано клиену и соответственно nginx сможет дальше читать >> что-либо от бэкенда. >> >> При заявленном ограничении скорости в 2 мегабайта в секунду - >> отправка клиенту гигабайта временных данных займёт секунд 500 >> минимум. Если при этом с бэкенда эти данные летят по гигабитному >> каналу со скоростью 100 мегабайт в секунду - прилетят они секунд за >> 10. То есть между nginx'ом и бэкендом 490 секунд ничего не будет >> происходить. Шансов на то, что бэкенд дождётся при настройках по >> умолчанию - никаких. >> >> Соответственно нужно: >> >> - увеличить временный файл, чтобы ответы влезали; >> >> - или уменьшить временный файл, чтобы его содержимое могло >> отправиться до того, как сработает таймаут на бэкенде. >> >> Ну либо настраивать таймауты на бэкенде и/или ограничение >> скорости, чтобы опять же временный файл мог отправиться до того, >> как сработает таймаут на бэкенде. >> >> Вообще, когда речь идёт о том, что проксируются большие файлы - >> одним из лучших решений может быть просто выключенная буферизация >> на диск, "proxy_max_temp_file_size 0;". Это позволяет избежать не >> только проблем с таймаутами на бэкенде, но и траты ресурсов на >> disk i/o, а равно проблем с переполнением диска под временные >> файлы при большом количестве одновременных запросов. >> >> [...] >> >> -- >> Maxim Dounin >> http://mdounin.ru/ >> _______________________________________________ >> nginx-ru mailing list >> nginx-ru@nginx.org >> http://mailman.nginx.org/mailman/listinfo/nginx-ru > >
_______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru