HAProxy 仅适用于本地主机

HAProxy 仅适用于本地主机

刚刚首次设置 HAProxy,作为平衡 2 台服务器的单个负载均衡器,每台服务器运行 Varnish 和 Nginx。

这是 cfg 文件:

global

        #uid 99
        #gid 99
        daemon
        stats socket /var/run/haproxy.stat mode 600 level admin
        maxconn 40000
        ulimit-n 81000
pidfile /var/run/haproxy.pid
        defaults
        mode    http
        contimeout      4000
        clitimeout      42000
        srvtimeout      43000
        balance roundrobin
listen webfarm 91.227.223.61:80
           mode http
           stats enable
           stats auth admin:password
           balance roundrobin
           cookie web insert indirect nocache
           option httpclose
           option forwardfor
           option httpchk HEAD /check.txt HTTP/1.0
           server webA 91.227.223.58:80 cookie A check
           server webB 91.227.221.121:80 cookie B check
           option          forwardfor except 91.227.223.61
           reqadd          X-Forwarded-Proto:\ https
           reqadd          FRONT_END_HTTPS:\ on
listen  stats :7777
        stats enable
        stats uri /
        option httpclose
        stats auth admin:password

问题是,这只能在本地主机上运行。如果我curl 91.227.223.61在本地机器上运行,页面加载正常。在任何其他机器上,我都要等待几秒钟才能让页面超时。

似乎任何服务器上都没有任何防火墙(目前),并且我已经iptables -F在每台机器上尝试过了。

答案1

我遇到了同样的问题。我的 HAProxy 在本地运行正常(已通过 curl 确认)。命令

iptables -P INPUT ACCEPT && iptables -P OUTPUT ACCEPT

解决了我的问题!

答案2

对于日志,请直接使用log 127.0.0.1 local0(不开启过滤notice),并确保您的 syslogd 正在监听 UDP 套接字(例如syslogd -r:)。还请添加“option httplog”以获取完整请求的日志。

您的描述让我想到了三种可能性:

  • 连接在其他地方被阻止,甚至无法到达 haproxy
  • 服务器无法响应“localhost”以外的主机名并关闭连接。
  • 服务器将重定向到 curl 无法到达的位置(例如:localhost:12345),导致 curl 尝试几次并失败。

日志会告诉你这一点。顺便问一下,您是否尝试过使用curl -itelnet查看服务器返回的内容?

此外,当您使此配置正常工作时,请将“option httpclose”替换为“option http-server-close”,这将支持客户端 HTTP keep-alive(我假设您正在运行 1.4 或 1.5-dev),从而获得更好的性能和更低的延迟。

答案3

也许还iptables -F不够。试试iptables -P INPUT ACCEPT && iptables -P OUTPUT ACCEPT

相关内容