背景WebSocket的工作在EC2上的网址,但不ElasticBeanstalk URL
我有反向代理(nginx的)指向ElasticBeanstalk(ELB)这是一个singleInstance环境类型,并创建一个EC2实例(EC2)。我正在使用dockerized nodejs应用程序。 nginx是我们基础架构的切入点。
应将描述
从浏览器,我可以直接调用EC2的WebSocket的网址和ELB具有相同的结果:
欢迎SockJS!
对于nginx的我使用下面的配置(nginx的conf.d/my.conf)其中,I只改变EC2或的网址ELB与proxy_pass
开头的行:
location /stomp {
proxy_pass <{EC2_URL}/stomp OR {ELB_URL}/stomp>;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
网址为EC2的网址正常。在ELB URL
的WebSockets返回一个错误回到我的客户:
代码:1002, 原因: “无法连接到服务器”
最奇怪的是,我的nginx服务器甚至不记录请求的情况下ELB。
问题
为什么ELB没有在nginx的配置工作?如何纠正?
我试过了吗?
我已经查了question和blog他们的意见重写像位于located in /tmp/deployment/config/etc#nginx#nginx.conf
00_elastic_beanstalk_proxy.conf
nginx的配置文件。但我的服务器在文件系统上没有任何nginx配置文件...
那么nginx运行在你的情况? –
你连接了哪个端口?默认的Load Balancer设置只能从端口80或端口443接收流量。如果您使用SSL,您是否拥有使用ElasticBeanstalk设置的证书?如果您从未在Nginx上获得请求,那么您可能永远不会从您的Load Balancer转发。要查看您的负载平衡器,您应该转到AWS面板上的EC2 - > Load Balancers。 – jonzlin95
@ jonzlin95我们通过端口80连接。在'EC2→Load Balancers'中没有列出负载均衡器,但这并不意外。因为我们只使用带有SingleInstance环境类型的ELB。 – zatziky