Http

HAProxy 在 120 秒後仍然返回 502

  • May 23, 2018

我配置了 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的指令,這是我做了幾次測試後的文件。

還有一些其他的acluse_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

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