Http
HAProxy 在 120 秒後仍然返回 502
我配置了 HAProxy,它將我的 http 請求轉發到內部埠上的各種服務。
其中一項服務可能需要幾分鐘來詳細說明答案,但 120 秒後 HAProxy 仍會返回
502 Bad Gateway
錯誤。我試圖設置更高的超時但沒有任何成功。這是
haproxy.cfg
文件global daemon maxconn 4096 log 127.0.0.1 local0 defaults mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms option forwardfor option http-server-close log global frontend http-in bind *:80 option tcplog default_backend my_default_backend timeout client 10m timeout server 10m acl is_test_request hdr(host) -i testrequest.mydomain.ext use_backend test_timeout if is_test_request backend test_timeout timeout connect 10s timeout server 10m server s1 127.0.0.1:8099 listen admin bind *:8080 stats enable
是的,有重複
timeout
的指令,這是我做了幾次測試後的文件。還有一些其他的
acl
,use_backend
但我已經把它們刪掉了。如何為該服務設置更高的超時時間?
更新:
這是一個範例日誌行
May 22 07:25:52 localhost haproxy[2552]: CLIENT_IP_REDACTED:PORT [22/May/2018:07:23:52.402] http-in test_timeout/s1 0/0/120004 204 SH 0/0/0/0/0 0/0
監聽埠的服務
8099
等待 180 秒來發送響應,但在 120 之後 haproxy 發回了一個502 Bad Gateway The server returned an invalid or incomplete response.
您的
SH
日誌條目中的 講述了這個故事。該欄位稱為斷開連接時的會話狀態,非常有價值。您記錄的內容表明您需要更仔細地查看 Web 伺服器的配置和行為。當 HAProxy 等待響應時,Web 伺服器本身似乎正在關閉連接。以下是我得出這個結論的方法:
S
: TCP 會話被伺服器意外中止,或者伺服器明確拒絕它。我們知道伺服器沒有拒絕連接,所以我們假設伺服器關閉了它,並查看第二個值。
H
:代理正在等待來自伺服器的完整、有效的響應 HEADERS(僅限 HTTP)。因此,在代理收到
\r\n\r\n
以下一組有效的 HTTP 響應標頭之前,Web 伺服器意外關閉了連接。http://cbonte.github.io/haproxy-dconv/1.6/configuration.html#8.5