nginx 發送不完整的回應

nginx 發送不完整的回應

如果不重新啟動或修改配置,nginx 有時會發送不完整的回應。今天,我可以很好地重現,但仍然不知道出了什麼問題或如何修復。

我將一個 5MB 檔案放入 nginx 設定使用的網站位置/別名路徑。沒有 php5-fpm、模組等,只有 nginx 來提供靜態檔案。

測試時,沒有其他用戶訪問伺服器,除了我的測試請求之外,沒有http訪問。

下載失敗,Google Chrome 在流量日誌中顯示有 2 個請求,儘管我只輸入了一次下載的 http url,並且沒有由我自己發起的重定向或其他第二個請求。

伺服器的 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,例如壁虎)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(KMLKML,例如壁虎)鉻/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,例如壁虎)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(KMLKML,例如壁虎)鉻/32.0.1700.10

您可以看到,始終有一個請求的回應大小=1,而另一個請求的回應大小為混合大小,但>1。然而,瀏覽器中的結果始終是相同的。 => 回應中斷,下載失敗。

為了確保它與 http status/response 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(KMLHT,例如壁虎)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(KMLHT,例如壁虎)Chrome/32.0.1700.107 Safari/537.36"

在瀏覽器中的結果相同。下載/請求總是失敗,並且 access.log 中的大小總是不同,例如隨機區塊或回應大小。

伺服器狀態:iowait、RAM、CPU 幾乎空閒。沒有高負載或限制。

這是一個已知問題或錯誤嗎?

答案1

對於像這樣簡單的場景,我很確定您的 nginx 伺服器前面有防火牆、IDS/IPS 裝置或其他東西會幹擾下載。如有疑問,請聯絡您的 ISP。

相關內容