ElasticBeanstalk 上的 Websockets 给出 404

Websockets on ElasticBeanstalk giving 404

我正在尝试将 websocket 服务器部署到 Elastic Beanstalk。 我有一个 Docker 容器,其中包含 nginx 和 jar 服务器,nginx 只是做转发。 nginx.conf 是这样的:

listen 80;
location /ws/ {             # <-- this part only works locally
    proxy_pass http://127.0.0.1:8090/;     # jar handles websockets on port 8090
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}
location / {                     # <-- this part works locally and on ElasticBeanstalk
    proxy_pass http://127.0.0.1:8080/;   # jar handles http requests on port 8080
    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-Host $server_name;
}

我可以在本地 运行 这个 docker 并且一切正常 - 提供 http 请求,我可以使用 ws://localhost:80/ws/ 连接 websockets 但是,当我部署到 Elastic Beanstalk 时,http请求仍然正常,但尝试在 ws://myjunk.elasticbeanstalk.com:80/ws/ 上连接 websockets 会出现 404 错误。我是否需要其他东西来允许 Elastic Beanstalk 上的 websockets?

好的,成功了。我需要 ElasticBeanstalk 负载均衡器来使用 TCP 而不是 HTTP。

要从 AWS 控制台执行此操作(如 2015 年 5 月 16 日所示),请转到您的 ElasticBeanstalk 环境,在左侧菜单中选择 "Configuration",在 "Network Tier" 下有一个"Load Balancing" 窗格。单击其齿轮,然后您可以将负载平衡器协议从 http 更改为 tcp。