Elastic Load Balancer不能用于运行Node.js的8000端口

我拥有运行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:8000DNS: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个监听器。