web-dev-qa-db-ja.com

Nginxは大きなファイルを提供しません

大きなファイルをダウンロードしようとすると(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を再起動すると、ダウンロードが正常に開始することです。しかし、これだけです。サーバーの再起動後に別のダウンロードを開始すると、同じように機能しません。

4
Andrey

間違いです。

このサーバーの前に構成されたCDNがありました。そして、それらのファイルの提供を開始する前に、それらのファイルを完全に取得するには時間がかかりすぎました。そのため、nginxを再起動するとすぐにダウンロードが始まりました。 CDNは不完全なファイルを提供していました。

0
Andrey

答えはこれらのリンクにあるようです。 Onetwo 。基本的に、ディスクキャッシュを無効にします

location / {
  proxy_max_temp_file_size 0;
}
3
Tim

私にとっての救済策は、次の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;
1
algenib