簡體   English   中英

用 PHP 理解 Apache 上的“408 請求超時”

[英]Understanding “408 Request Timeout” on Apache with PHP

問題描述 - Apache 日志

我在 Apache 日志文件中發現了與此類似的項目:

166.147.68.243 [24/Feb/2013:06:06:25 -0500] 19 web-site.com "-" 408 - "-"

我有自定義日志格式,這里的408代表狀態。 日志格式為:

LogFormat "%h %t %D %V \"%r\" %>s %b \"%{User-agent}i\"" detailed

通常日志文件中的行看起來像

184.73.232.108 [26/Feb/2013:08:38:16 -0500] 30677 www.site.com "GET /api/search... HTTP/1.1" 200 205 "Zend_Http_Client"

這就是為什么 408 錯誤行對我來說看起來很奇怪。 沒有記錄請求,我不知道應該優化什么。

問題

如何解決問題? 我應該收集哪些額外的信息或日志? 什么可能導致問題? 這是服務器上的問題嗎? 或者這絕對是網絡連接問題?

我正在解決這個問題,因為我們的客戶抱怨他的手機出現 408 錯誤。 我在日志文件中發現了很多記錄,但我不得不承認我不知道該怎么做。


我自己的研究

這里已經有關於這個主題的幾個問題。 但人要具體得多。 就像他們討論某些特定客戶端軟件和腳本的問題一樣。 在這里,我在 iPhone 上打開某個頁面時遇到了錯誤。

例如在HTTP 中, 408 Request timeout ,建議在 POST 之前做 GET 請求。 如果我有自定義客戶端,我可以這樣做。 但我無法控制用戶瀏覽器的行為。

猜一猜

在網上搜索並思考這個問題時,我發現了https://serverfault.com/questions/383290/too-many-408-error-codes-in-access-log

建議將Timeout配置參數更新回其默認值。

#
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 300

我首先嘗試了值 30,因為我認為 30 秒應該足夠了。 但即使使用 300 秒的默認值,我仍會繼續在日志中收到錯誤消息。 我在寫這篇文章時做了tail -f並在幾分鍾內得到了超過 10 行。

對我來說,這看起來不是一個完整的解決方案。

在對該主題進行了一些研究后,我得出了以下答案。 它由我們的首席開發人員提供,我認為它很好地解釋了這個主題。

這些錯誤是完全正常的。 它們不是更大問題的跡象,而是使 Apache 打開的時間超過允許時間的正常連接。

例如,反復運行它們的客戶端查詢使 Apache 保持打開狀態。 Apache 的回應是適當地關閉了他。

如果沒有,那么少數人就可以接管我們的服務器,不允許其他人連接。

大多數情況下,這些錯誤來自尋找漏洞的系統,您可以通過打開 telnet 會話並將其保持打開狀態來重新創建它。

同時,tail -f 訪問日志,在 X 時間 (KeepAliveTimeout) 內,您將看到具有相同錯誤代碼的 IP 彈出窗口。

在 Apache 1.3 的時代,這個錯誤很常見,但后來 2.2 出來了,他們把它刪除了,直到我們有足夠多的人要求歸還它,因為它讓我們知道有多少人只打開端口,並且不請求實際資源等。

我認為除了確保將 Timeout 設置為我在原始問題中描述的某個合理值之外,這里不應該做任何其他事情。

實際上,apache 日志中的很多 408 消息是現代瀏覽器中的結果預取機制。 通過查看過去 3 年的 apache 日志,相同流量的 408 錯誤數量增加了一倍多。

如果在 Apache 中設置了代理,並且后端由於某種原因沒有及時響應,則日志中將看到相同的 408 -- -- 。 代理超時是單獨配置的,這就是為什么更改 Apache 默認超時似乎對這些請求沒有任何作用。

所有 http 請求都支持用戶名和密碼。 沒有用戶名="-",沒有密碼="-",密碼="*"。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM