Загрузка больших файлов

Andrew Velikoredchanin andy at atomail.com
Mon Sep 5 16:35:51 MSD 2005


Andrei Nigmatulin wrote:
> On Monday 05 September 2005 16:04, Andrew Velikoredchanin wrote:
> 
>>Andrei Nigmatulin wrote:
>>
>>>On Monday 05 September 2005 14:45, Igor Sysoev wrote:
>>>
>>>>On Mon, 5 Sep 2005, Andrei Nigmatulin wrote:
>>>>
>>>>>При загрузке в fastcgi приложение файлов, чей размер больше
>>>>>client_max_body_size, nginx похоже просто закрывает соединение, не
>>>>>выдавая клиенту ничего. Можно ли как-то отловить эту ошибку, чтобы
>>>>>показать клиенту страничку с объяснениями где он не прав ?
>>>>
>>>>В каком браузере тестировалось ?
>>>>nginx выдаёт 413 ошибку, но вот не все браузеры умеют её показывать:
>>>>http://sysoev.ru/web/upload.html
>>>
>>>В Firefox 1.0.6 и Konqueror 3.4.0.
>>>
>>>Firefox выдает popup окно "Document contains no data"
>>>
>>>Konqueror выдает страницу с ошибкой
>>>
>>>An error occurred while loading http://xxxxx.ru/upload.phtml:
>>>Connection to host xxxxx.ru is broken.
>>>
>>>Как я понял из статьи, как только веб сервер получает от клиента
>>>Content-Length, он может ответить клиенту 413 и закрыть соединение на
>>>чтение, спровоцировав broken pipe в броузере ? А как делает nginx ?
>>
>>Я с таким сталкивался. Такое бывает когда коннект с клиентом медленный,
>>у буферы tcp_*mem большие. Если nginx не успевает заполнить буфер
>>передачи за время send_timeout из его конфига, в нем срабатывает таймоут
>>и связь с клиентом обрывается без разговоров.
> 
> 
> Да, это немного похоже на мой случай. tcpdump показывает, что посередине 
> закачиваемого файла nginx рвет соединение, по времени - через 60 сек после 
> ответа 413. Однако, в конфиге у меня:
> 
>     client_header_timeout  1m;
>     client_body_timeout    3m;
>     send_timeout           2m;
> 
> Чего-то я не понимаю ;-)

Тогда почти 100% этот эффект. По умолчани send_timeout и стоит в 1 
минуту. Так что проверяй размер буферов в /etc/sysctl.conf (если у тебя 
линух):

net.ipv4.tcp_rmem = 1024 8192 16384
net.ipv4.tcp_wmem = 4096 32768 65535
net.ipv4.tcp_mem =  4096 32768 65535

Если у тебя существенно больше - лучше поправь.

-- 
Best regards, Andrew Velikoredchanin





More information about the nginx-ru mailing list