如何防止 502 状态代码作为负载均衡器的 HAPROXY 作为响应



我有 3 台服务器:

server (A)= a nginx(port 80) as reverse proxy to kestler (5000 port)
server (B)= a nginx(port 80) as reverse proxy to kestler (5000 port)
server (C)= a HAProxy as load balancer for port 80 of server (A) and (B)
and server A & B are quite similar.

每件事都运行良好,haproxy 将请求转发到服务器 (A( 和 (B(,但如果其中一个服务器(例如 A(中的红隼被杀死,nginx 响应 502 错误网关错误,并且 haproxy 没有检测到此问题,仍然将请求重定向到它,这是错误的!它必须在这段时间内将请求重定向到服务器 (B(。

global
log 127.0.0.1 local2 info
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
option redispatch
retries 3
timeout connect 5s
timeout client 50s
timeout server 50s
stats enable
stats hide-version
stats auth admin:admin
stats refresh 10s
stats uri /stat?stats
frontend http_front
bind *:80
mode http
option httpclose
option forwardfor
reqadd X-Forwarded-Proto: http
default_backend http_back
backend http_back
balance roundrobin
mode http
cookie SERVERID insert indirect nocache
server ServerA 192.168.1.2:80 check cookie ServerA
server ServerB 192.168.1.3:80 check cookie ServerB

如何解决此问题? 非常感谢。

你只是在检查nginx是否正在运行,而不是检查应用程序是否足够健康,可以使用。

backend中,添加option httpchk

option httpchk GET /some/path HTTP/1.1rnHost: example.com

some path替换为一个路径,该路径将证明应用程序在返回200 OK(或任何 2xx 或 3xx 响应(时在该服务器上是否可用,并将example.com替换为应用程序所需的 HTTPHost标头。

option httpchk

默认情况下,服务器运行状况检查仅包括尝试建立 TCP 连接。指定option httpchk时,一旦建立 TCP 连接,就会发送完整的 HTTP 请求,响应 2xx 和 3xx 为 被视为有效,而所有其他指示服务器故障,包括缺少任何响应。

如果应用程序不正常,这会将服务器标记为不正常,因此 HAProxy 将停止向其发送流量。 您需要使用每台服务器上的interdowninterfastinter选项为每个服务器配置检查间隔,以指定 HAProxy 执行检查的频率。

最新更新