我试图使用HAProxyredirect在不同的nodejs webserver上工作在三个不同的端口。 我想要的是,当我尝试打开/ node1 HAProxyredirect到该Web服务器。 这是HAProxyconfiguration:
frontend dispatcher mode http bind *:80 acl node_serv1 url_beg /node1 acl node_serv2 url_beg /node2 acl node_serv3 url_beg /node3 use_backend backend_1 if node_serv1 use_backend backend_2 if node_serv2 use_backend backend_3 if node_serv3 backend backend_1 mode http balance roundrobin option httpchk server web01 127.0.0.1:3001 check backend backend_2 mode http balance roundrobin option httpchk server web02 127.0.0.1:3002 check backend backend_3 mode http balance roundrobin option httpchk server web03 127.0.0.1:3003 check
所有三个nodejs web服务器正在工作,但是当我尝试启动haproxy我得到这个错误:
Starting haproxy: [ALERT] 111/105652 (27208) : Starting frontend dispatcher: cannot bind socket [0.0.0.0:80]
在网上看有人build议添加此属性
net.ipv4.ip_nonlocal_bind=1
在/etc/sysctl.conf
但错误仍然存在,HAProxy无法启动。 我的configuration有什么问题?
最可能的原因是一些其他进程已经绑定到端口80(例如另一个networking服务器)。
在开始haproxy之前,我会build议检查端口80是否可以绑定
nestat -anp | grep ":80"
如果结果不是空的,某个进程已经“拿走”了端口80,你的haproxy将无法绑定到它(特别是当你试图在所有接口上绑定时)。 一些解决scheme是停止这个过程,但这是由你来validation是否可行,因为有可能在那里运行的另一个网页。
另一个原因是您尝试以非root用户身份启动进程。 通常不允许非root用户绑定到特权端口(数字低于1024)。