При попытке загрузить большой файл (не уверен, какого размера достаточно, при попытке загрузить 5 ГБ) соединение прерывается:
$ wget --verbose http://example.net/large.zip -O /dev/null
--2016-12-14 12:52:38-- http://example.net/large.zip
Resolving example.net (example.net)... 1.2.3.4
Connecting to example.net (example.net)|1.2.3.4|:80... connected.
HTTP request sent, awaiting response...
И это длится вечно, и под вечностью я подразумеваю как минимум 10 минут.
Конфигурация nginx для таких файлов:
location ~* ^.+\.(css|js|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
access_log off;
log_not_found off;
expires 7d;
}
Маленькие статические файлы (и под маленькими я имею в виду, например, 50 Мб) обслуживаются нормально.
Отключение access_log; на "on" не помогает, в логах по этому запросу ничего нет.
Изменение типа файла с zip на другой не помогает.
Самое странное, что если я начинаю загрузку и после этого перезапускаю nginx, загрузка начинается нормально. Но только этот. Если вы начнете новую загрузку после перезапуска сервера, она не будет работать таким же образом.
К сожалению, моя ошибка.
Перед этим сервером был настроен CDN. И потребовалось слишком много времени, чтобы полностью получить эти файлы, прежде чем он начал их обслуживать. Вот почему загрузка началась сразу после перезапуска nginx. CDN выдавал неполный файл.
Для меня исправлением были эти две настройки:
В файле:
/etc/nginx/nginx.conf
Добавить:
proxy_max_temp_file_size 0;
proxy_buffering off;
Между строками client_max_body_size 128M;
и server_names_hash_bucket_size 256;
:
http {
client_max_body_size 128M;
proxy_max_temp_file_size 0;
proxy_buffering off;
server_names_hash_bucket_size 256;