我拥有运行PHP和Node.js( socket.io
)的EC2实例,并允许访问,我释放了端口80(Apache)和8000(节点),一切正常(如果我访问www.mydomain.com
网站是通常显示,如果我访问www.mydomain.com:8000/socket.io/socket.io.js
将显示socket.io
脚本)。 但是,我想为此实例设置一个Elastic Load Balancer(仅用于testing,因为稍后我将在Auto Scaling中使用它),所以我使用以下设置创build了目标组:
之后,我在Target Group中注册了这个实例,状态检查工作完美:
所以,在我的负载均衡器(应用程序负载平衡器,而不是经典的负载平衡器),我添加了以下监听器(如果我删除了8000监听器,当我访问DNS:8000
或DNS:8000/socket.io/socket.io.js
被显示,只有错误ERR_CONNECTION_REFUSED
):
而在这个负载平衡器的安全组中,我还添加了端口80和8000:
所以当访问Load Balancer的DNS名称时,它通常会显示网站,但是,如果我尝试访问DNS:8000/socket.io/socket.io.js
它会将URL重写为DNS:8000
并继续显示网站,而不是socket.io
脚本。 我已经尝试将path模式/socket.io/*
添加到8000监听器,但它/socket.io/*
相同的方式。 那么,我怎样才能显示socket.io
脚本呢?
您有一个目标组在您的实例上指向端口80。 您已将该目标组附加到两个侦听器。
相反,您需要两个目标组分别注册您的实例,一个目标为8000,另一个为80.然后,您将分别将这些目标组附加到80和8000个监听器。