2011-09-07 200 views
12

我們最近實現了一個基於nginx的反向代理。NGINX反向代理:很多html狀態代碼400響應,爲什麼?

在調試我們的訪問日誌時,我們看到了很多狀態碼400的結果。

他們是這個樣子:

[07/Sep/2011:05:49:04 -0700] - "400" 0 "-" "-" "-" 

我們已經啓用了調試錯誤日誌記錄,他們通常對應於這樣的事情:

2011/09/07 05:09:28 [info] 5937#0: *30904 client closed prematurely connection while reading client request line 

我們試圖提高一個數量的緩衝區,正如我們能夠谷歌上幾頁所述。

http://www.ruby-forum.com/topic/173362

http://blog.craz8.com/articles/2009/06/17/nginx-400-bad-request-errors-due-to-cookies-and-what-to-do-about-them

無濟於事。

這是怎麼發生的?

這是一個退縮的nginx反向代理 - > apache後端服務器。

值得一提的是,我們網站上的獨特內容類型非常少。我們使用許多瀏覽器測試過這些,並且沒有親自接收這400個結果中的任何一個。

謝謝!


而且網址在其日誌中詳細說明類似的條目:

http://blog.rayfoo.info/2009/10/weird-web-server-access-log-entries

+0

是第一個記錄你的Apache日誌和第二個nginx的? – palacsint

+0

否定的。第一個是nginx訪問日誌,第二個是設置爲調試的nginx錯誤日誌。 –

+1

您是否支持EC2 Elastic Load Balancer?部分健康檢查會導致這些記錄經常記錄在日誌中。 – Meekohi

回答

0

首先,這是相當有可能是你的客戶發送帶有非常大的HTTP頭或URL請求。也許你的應用程序的舊版本設置了一些(可能是大的)現在未被使用的cookie,並且一些客戶端仍在嘗試將它們發送回去。

我將頭緩衝區設置爲一個非常大的值,並在應用程序端記錄頭/請求的大小和完整的請求,如果它們比平常大。或者完全從鏈中取出nginx並在相同的條件下記錄標題/請求。如果可以的話,只需將那些出現400錯誤的IP /子網的nginx取出。我想Nginx可以記錄這400個錯誤的源IP。

+0

嘗試將最大標題大小設置爲2048k。同樣的問題依然存在。因爲這種情況發生得相當頻繁,所以嘗試做一些tcpdump運行......即使這是在一個非常活躍的生產服務器上運行2-3分鐘,也不應該使該盒超載。 –

+0

恩,2097152字節應該足夠用於任何http請求。 tcpdump是個好主意。讓我知道如果你找到一些東西。 – palacsint

1

您正在處理SSL連接嗎?你可以添加$ssl_cipher $ssl_protocol到你的訪問日誌格式嗎?

8

我發現這是由於使用Chrome,這顯然打開額外的連接偶爾沒有發送任何數據。

這裏有更多的一些信息:http://www.ruby-forum.com/topic/2953545

現在的問題是如何處理他們 - 答案只要不是很令人滿意。