При попытке загрузить большой файл (не уверен, какого размера достаточно, пытаюсь загрузить 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; "по" не помогает, в логах ничего нет по этому запросу.
Изменение типа файла с zip на другой не помогает.
Самое странное, что если я начну загрузку и после этого перезапускаю nginx, загрузка начнется нормально. Но только этот. Если вы начнете новую загрузку после перезапуска сервера, она не будет работать таким же образом.
Ответ, кажется, находится в этих ссылках. Один, два. В основном отключить кеш диска
location / {
proxy_max_temp_file_size 0;
}
Для меня лекарством были эти две настройки:
В файле: /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;
Ой, моя ошибка.
Перед этим сервером был настроен CDN. И потребовалось слишком много времени, чтобы полностью получить эти файлы, прежде чем он начал их обслуживать. Вот почему загрузка началась мгновенно, когда я перезапустил nginx. CDN выдавал неполный файл.