![弹性负载均衡器无法在运行 Node.js 的 8000 端口上运行](https://linux22.com/image/694982/%E5%BC%B9%E6%80%A7%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E5%99%A8%E6%97%A0%E6%B3%95%E5%9C%A8%E8%BF%90%E8%A1%8C%20Node.js%20%E7%9A%84%208000%20%E7%AB%AF%E5%8F%A3%E4%B8%8A%E8%BF%90%E8%A1%8C.png)
我拥有一个运行 PHP 和 Node.js ( ) 的 EC2 实例socket.io
,为了允许访问,我释放了端口 80 (Apache) 和 8000 (Node),一切正常(如果我访问,www.mydomain.com
网站会正常显示,如果我访问,www.mydomain.com:8000/socket.io/socket.io.js
脚本socket.io
也会显示)。但是,我想为这个实例设置一个 Elastic Load Balancer(仅用于测试,因为稍后我将与 Auto Scaling 一起使用它),因此我使用以下设置创建了目标组:
之后,我在目标组中注册了该实例,并且状态检查运行正常:
因此,在我的负载均衡器(应用程序负载均衡器而不是经典负载均衡器)中,我添加了以下侦听器(如果我删除 8000 个侦听器,则当我访问时DNS:8000
或未DNS:8000/socket.io/socket.io.js
显示任何内容时,只有错误ERR_CONNECTION_REFUSED
):
并且在这个负载均衡器的安全组中我还添加了端口 80 和 8000:
因此,当访问负载均衡器的 DNS 名称时,它通常会显示网站,但是,如果我尝试访问,DNS:8000/socket.io/socket.io.js
它会将 URL 重写为DNS:8000
并继续显示网站,而不是脚本socket.io
。我已经尝试将路径模式添加/socket.io/*
到 8000 侦听器,但它仍以相同的方式继续。那么,我该怎么做才能显示脚本socket.io
?
答案1
您有一个目标组指向实例上的端口 80。您已将该目标组附加到两个侦听器。
相反,您需要两个分别注册您的实例的目标组,一个针对 8000,另一个针对 80。然后,您将分别将这些目标组附加到 80 和 8000 个侦听器。