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

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

我正在尝试使用 HAProxy 重定向到在三个不同端口上运行的不同 nodejs webserver。我想要的是,当我尝试打开 /node1 时,HAProxy 将我重定向到该 web 服务器。这是 HAProxy 配置:

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 网络服务器都在运行,但是当我尝试启动 haproxy 时出现此错误:

Starting haproxy: [ALERT] 111/105652 (27208) : Starting frontend dispatcher: cannot bind socket [0.0.0.0:80]

在网上看到有人建议添加此属性

 net.ipv4.ip_nonlocal_bind=1

在 /etc/sysctl.conf 上

但错误仍然存​​在,HAProxy 无法启动。我的配置有什么问题?

答案1

最可能的原因是其他某个进程已经绑定到端口 80(例如另一个 Web 服务器)。

在启动 haproxy 之前我建议检查端口 80 是否可以绑定

nestat -anp | grep ":80"

如果结果不为空,则表示某个进程已经“占用”了端口 80,您的 haproxy 将无法绑定到该端口(尤其是当您尝试绑定到所有接口时)。 某种解决方案是停止此进程,但这取决于您是否可行,因为那里可能正在运行另一个网页。

另一个原因是您尝试以非 root 用户身份启动该进程。非 root 用户通常不允许绑定到特权端口(编号低于 1024)。

答案2

只需将此行添加到“/etc/sysctl.conf”文件即可

net.ipv4.ip_nonlocal_bind = 1

然后运行此命令

sysctl -p

希望能帮助到你

相关内容