再起動や設定の変更を行わないと、nginx が不完全な応答を送信することがあります。今日はうまく再現できましたが、何が問題なのか、どのように修正すればよいのかまだわかりません。
nginx が使用するように設定されているサイトの場所/エイリアス パスに 5 MB のファイルを配置しました。php5-fpm やモジュールなどはなく、静的ファイルを提供するための nginx のみです。
テスト中は、サーバーにアクセスする他のユーザーはおらず、テスト要求以外の http アクセスもありません。
ダウンロードは失敗し、Google Chrome のトラフィック ログには 2 つのリクエストがあったと表示されますが、ダウンロード用の http URL を 1 回だけ入力し、リダイレクトや自分で開始した他の 2 番目のリクエストはありませんでした。
サーバーの access.log でも同じ問題が発生します:
テスト1
[14/May/2014:14:06:53 +0200] "GET /dev/test_test.m4v HTTP/1.1" 206 1 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36"
[14/May/2014:14:06:53 +0200] "GET /dev/test_test.m4v HTTP/1.1" 200 130680 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.10
[14/May/2014:14:07:15 +0200] "GET /dev/test_test.m4v HTTP/1.1" 206 1 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36"
[14/May/2014:14:07:15 +0200] "GET /dev/test_test.m4v HTTP/1.1" 200 114684 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.10
応答サイズが 1 のリクエストが常に 1 つあり、サイズが混在しているが 1 より大きいリクエストがもう 1 つあることがわかります。ただし、ブラウザーの結果は常に同じです。=> 応答が壊れているため、ダウンロードに失敗しました。
念のため、http ステータス/レスポンス 206 とは関係がないので、max_ranges 0;
設定に追加して再試行します -> test2。
テスト2
[14/May/2014:14:11:36 +0200] "GET /dev/test_test.m4v HTTP/1.1" 200 152460 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36"
[14/May/2014:14:11:38 +0200] "GET /dev/test_test.m4v HTTP/1.1" 200 142296 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36"
ブラウザでも同じ結果になります。ダウンロード/リクエストは常に失敗し、access.log のサイズはランダム チャンクや応答サイズのように常に異なります。
サーバーの状態: iowait、RAM、CPU はほぼアイドル状態です。高負荷や制限はありません。
これは既知の問題またはバグですか、それともこれを修正する方法をご存知ですか?
答え1
このような単純なシナリオの場合、nginx サーバーの前にファイアウォール、IDS/IPS デバイス、またはダウンロードを妨害するその他の何かがあると考えられます。疑わしい場合は、ISP に問い合わせてください。