Logging

HAProxy - 錯誤 408 - 隨機

  • November 28, 2017

代理版本 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/

引用自:https://serverfault.com/questions/885264