HAProxy - 錯誤 408 - 隨機
代理版本 1.7.9 2017/08/18
在索引文件中的腳本標記內發出的簡單 GET 請求被隨機丟棄,而是返回自定義的 400 錯誤 html,狀態碼為 200。有時連續 2-3 次,有時甚至連續 30 次。它似乎完全隨機出現。這些是由節點後端靜態配置提供的 js 文件。
從後端監聽的伺服器日誌來看,請求似乎沒有到達。直接訪問文件總是有效的。繞過代理訪問後端不會重現問題。
由於 Error 顯然是自定義錯誤消息,因此它必須是 HAproxy。添加選項 accept-invalid-http-request 和選項 accept-invalid-http-response 並沒有解決問題。socat admin 命令不顯示任何錯誤,並且 stat 不將這些計入 4xx 響應。
我沒主意了。任何人有任何建議如何檢查為什麼會發生這種情況?
日誌包括 —- 在所有請求中。因此,索引 HTML 文件請求 7-8 個文件作為依賴項。一些 css、js 文件作為 GET 請求。從所有這些請求中,有時沒有提供一兩個文件,但自定義錯誤 408 HTML 以響應程式碼 200 的數據提供。此響應 200 僅在瀏覽器上可見,它
Uncaught SyntaxError: Unexpected token <
在嘗試將 HTML 解析為 JS 時顯示文件。現在通過 rsyslog 記錄在日誌上,這些請求不會出現。後端也不記錄這些請求。然後,點擊刷新後,對文件集的下一個請求提供服務,如果真的提供服務,它們的程式碼是 200。由於我只是不斷刷新頁面,內容沒有改變,所有請求都應該顯示在所有日誌,程式碼為 304….global daemon maxconn 4096 log 127.0.0.1 local2 debug chroot /var/lib/haproxy pidfile /var/run/haproxy.pid user haproxy group haproxy stats socket /var/lib/haproxy/stats ssl-default-bind-ciphers PROFILE=SYSTEM ssl-default-server-ciphers PROFILE=SYSTEM tune.ssl.default-dh-param 2048 ssl-server-verify none stats socket /var/run/haproxy.stat defaults mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 1s timeout queue 1m timeout connect 1s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 option forwardfor option http-server-close stats enable stats uri /stats stats realm Haproxy\ Statistics stats auth stat:stat errorfile 400 /var/www/html/400.html errorfile 403 /var/www/html/400.html errorfile 408 /var/www/html/400.html errorfile 500 /var/www/html/500.html errorfile 501 /var/www/html/501.html errorfile 502 /var/www/html/502.html errorfile 503 /var/www/html/503.html errorfile 504 /var/www/html/504.html option accept-invalid-http-request option accept-invalid-http-response
當它失敗時,我在瀏覽器中辨識出自定義錯誤文件 400.html 內容。
正如@Michael-sqlbot 指出的那樣,
errorfile 408 /var/www/html/408.html
應該完全刪除。這不僅僅是 chrome 問題,而是快速搜尋導致 https://www.haproxy.com/blog/haproxy-and-http-errors-408-in-chrome/