【发布时间】:2018-02-11 21:06:06
【问题描述】:
背景
我有反向代理 (nginx) 指向 ElasticBeanstalk (ELB),它是一个单一实例环境类型并创建一个 EC2 实例 (EC2 )。我正在使用一个 dockerized nodejs 应用程序。 nginx 是我们基础架构的入口点。
说明
从浏览器中,我可以直接调用 EC2 和 ELB 的 Websocket URL,结果相同:
欢迎使用 SockJS!
对于 nginx 我使用以下配置 (nginx conf.d/my.conf) 我只更改 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 URL 上的 Websocket 工作正常。
ELB URL 上的 Websocket 将错误状态返回给我的客户端:
代码:1002, 原因:“无法连接到服务器”
最奇怪的是,我的 nginx 服务器甚至不记录 ELB 的请求。
问题
为什么 ELB 在 nginx 配置中不起作用?如何纠正?
我尝试了什么?
我检查了question 和blog,他们建议覆盖位于located in /tmp/deployment/config/etc#nginx#nginx.conf 中的00_elastic_beanstalk_proxy.conf 等nginx 配置文件。但是我的服务器在文件系统上没有任何 nginx 配置文件...
【问题讨论】:
-
那么在你的情况下,nginx 在哪里运行?
-
您通过哪个端口连接?默认负载均衡器设置可能只接收来自端口 80 或端口 443 的流量。如果您使用的是 SSL,您是否使用 ElasticBeanstalk 设置了证书?如果您从未在 Nginx 端收到请求,那么您可能永远不会从负载均衡器转发。要查看您的负载均衡器,您应该转到 AWS 面板上的 EC2 -> 负载均衡器。
-
@jonzlin95 我们通过端口 80 连接。
EC2 → Load Balancers中没有列出负载均衡器,但这并不奇怪。因为我们只使用 SingleInstance 环境类型的 ELB。 -
@TarunLalwani
nginx是我们基础设施的入口点。它将流量重定向到 ELB(或直接到 EC2)。 -
删除这个
proxy_set_header Host $host;,然后再试一次,看看它是否有效
标签: nginx amazon-elastic-beanstalk amazon-elb