HAProxy只为localhost工作

首次设置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 ,页面加载罚款。 从任何其他机器,我等待几个secons的页面超时。

没有任何服务器上的防火墙(还),我已经尝试在每台机器上的iptables -F

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

你所描述的让我想到三种可能性:

  • 连接被阻塞在别的地方甚至没有达到haproxy
  • 服务器无法响应“localhost”以外的主机名并closures连接。
  • 服务器响应一个redirect到curl无法访问的位置(例如:localhost:12345),导致curl尝试几次并失败。

日志会告诉你。 顺便说一句,你用curl -itelnet尝试看看服务器返回的是什么?

此外,当你得到这个configuration工作,请replace“选项httpclose”与“选项http-server-close”,这将支持客户端HTTP保持活着(我假设你正在运行1.4或1.5-dev) ,导致更好的性能和更低的延迟。

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