<div dir="ltr">При директивах</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">вт, 6 окт. 2020 г. в 17:16, Maxim Dounin <<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello!<br>
<br>
On Tue, Oct 06, 2020 at 10:42:47AM +0300, Evgeniy Berdnikov wrote:<br>
<br>
> On Mon, Oct 05, 2020 at 10:24:17PM +0300, Alexey wrote:<br>
> > День добрый!<br>
> > <br>
> > Вы качаете файл, получаемых от прокси апстрима?<br>
> > <a href="https://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_max_temp_file_size" rel="noreferrer" target="_blank">https://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_max_temp_file_size</a><br>
> > <br>
> > Вы упираетесь в 1Гб временного файла. когда качается быстро, он<br>
> > вообще в темп не пишется, если файл прилетает от апстрима быстрее<br>
> > чем забираем, то он уже пишется во временный файл. вы успеваете<br>
> > скачать столько, сколько прилетает до начала записи во временный<br>
> > файл + макс размер файла.<br>
> <br>
>  Наличие лимита на размер временного файла это что, повод обрывать закачку?<br>
<br>
Наличие лимита - ни разу не повод обрывать закачку, nginx её и не <br>
обрывает.<br>
<br>
Другой вопрос, что если буфер забит - nginx'у некуда читать <br>
дополнительные данные, и в результате бэкенд может закрыть <br>
соединение по таймауту до того, как содержимое временного файла <br>
будет отдано клиену и соответственно nginx сможет дальше читать <br>
что-либо от бэкенда.<br>
<br>
При заявленном ограничении скорости в 2 мегабайта в секунду - <br>
отправка клиенту гигабайта временных данных займёт секунд 500 <br>
минимум.  Если при этом с бэкенда эти данные летят по гигабитному <br>
каналу со скоростью 100 мегабайт в секунду - прилетят они секунд за <br>
10.  То есть между nginx'ом и бэкендом 490 секунд ничего не будет <br>
происходить.  Шансов на то, что бэкенд дождётся при настройках по <br>
умолчанию - никаких.<br>
<br>
Соответственно нужно:<br>
<br>
- увеличить временный файл, чтобы ответы влезали;<br>
<br>
- или уменьшить временный файл, чтобы его содержимое могло <br>
  отправиться до того, как сработает таймаут на бэкенде.<br>
<br>
Ну либо настраивать таймауты на бэкенде и/или ограничение <br>
скорости, чтобы опять же временный файл мог отправиться до того, <br>
как сработает таймаут на бэкенде.<br>
<br>
Вообще, когда речь идёт о том, что проксируются большие файлы - <br>
одним из лучших решений может быть просто выключенная буферизация <br>
на диск, "proxy_max_temp_file_size 0;".  Это позволяет избежать не <br>
только проблем с таймаутами на бэкенде, но и траты ресурсов на <br>
disk i/o, а равно проблем с переполнением диска под временные <br>
файлы при большом количестве одновременных запросов.<br>
<br>
[...]<br>
<br>
-- <br>
Maxim Dounin<br>
<a href="http://mdounin.ru/" rel="noreferrer" target="_blank">http://mdounin.ru/</a><br>
_______________________________________________<br>
nginx-ru mailing list<br>
<a href="mailto:nginx-ru@nginx.org" target="_blank">nginx-ru@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a></blockquote></div>