大きなファイルをダウンロードしようとすると(5Gbをダウンロードしようとして十分なサイズがわからない)、接続が停止します。
$ 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;
}
小さな静的ファイル(つまり、たとえば50Mbのファイル)は問題なく提供されます。
Access_logをオフにします。 「オン」にしても効果はありません。このリクエストのログには何もありません。
ファイルタイプをZipから別のタイプに変更しても、効果はありません。
最も奇妙なのは、ダウンロードを開始し、nginxを再起動すると、ダウンロードが正常に開始することです。しかし、これだけです。サーバーの再起動後に別のダウンロードを開始すると、同じように機能しません。
間違いです。
このサーバーの前に構成されたCDNがありました。そして、それらのファイルの提供を開始する前に、それらのファイルを完全に取得するには時間がかかりすぎました。そのため、nginxを再起動するとすぐにダウンロードが始まりました。 CDNは不完全なファイルを提供していました。
私にとっての救済策は、次の2つの設定でした。
ファイル内:/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;