簡體   English   中英

502 Bad Gateway HAproxy

[英]502 Bad Gateway HAproxy

我正在運行 Ubuntu 12.04LTS。 我的網絡服務器是 Tomcat 7.0.42,我使用 HAProxy 作為代理服務器。 我的應用程序是一個使用 websockets 的 servlet 應用程序。

有時當我請求我的頁面時,我會在某些資源上收到“502 Bad Gateway”錯誤,而不是在所有資源上,而是在某些資源上。 我認為這與我的HAProxy配置有關,如下所示:

global
    maxconn     4096 # Total Max Connections. This is dependent on ulimit
    nbproc      1

defaults
    mode        http
    option  http-server-close
    option httpclose
#   option  redispatch
    no option checkcache  # test against 502 error

frontend all 0.0.0.0:80
    timeout client 86400000
    default_backend www_backend
    acl is_websocket hdr(Upgrade) -i WebSocket
    acl is_websocket hdr_beg(Host) -i ws

    use_backend socket_backend if is_websocket

    backend www_backend
        balance roundrobin
        option forwardfor # This sets X-Forwarded-For
        timeout server 30000
        timeout connect 4000
        server apiserver localhost:8080 weight 1 maxconn 1024 check

    backend socket_backend
        balance roundrobin
        option forwardfor # This sets X-Forwarded-For
        timeout queue 5000
        timeout server 86400000
        timeout connect 86400000
        server apiserver localhost:8080 weight 1 maxconn 1024 check

我必須更改什么才能防止 502 錯誤?

首先,啟用 haproxy 日志記錄。 它會簡單地告訴您為什么它會給出 502。 我的猜測是后端“localhost:8080”根本無法跟上或無法在 4000 毫秒“超時連接 4000”內獲得連接。

您可能已經超出了 HAProxy 中的一些默認限制。 嘗試將以下內容添加到全局部分:

tune.maxrewrite 4096
tune.http.maxhdr 202

你應該用這些替換你的默認值:

# Set balance mode
balance random
# Set http mode
mode http
# Set http keep alive mode (https://cbonte.github.io/haproxy-dconv/2.3/configuration.html#4)
option http-keep-alive
# Set http log format
option httplog
# Dont log empty line
option dontlognull
# Dissociate client from dead server
option redispatch
# Insert X-Forwarded-For header
option forwardfor

不要使用 http-server-close,這很可能是您出現問題的原因。

Keep-alive 將與雙方的客戶端和服務器建立連接。 它也適用於 websockets。

如果您在服務器上啟用檢查,您還需要使用以下內容對其進行配置:

# Enable http check
option httpchk
# Use server configuration
http-check connect default
# Use HEAD on / with HTTP/1.1 protocol for Host example.com
http-check send meth HEAD uri / ver HTTP/1.1 hdr Host example.com
# Expect status 200 to 399
http-check expect status 200-399

暫無
暫無

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

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