HAProxy无法在nodejs web服务器上绑定套接字

我试图使用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)。