难以说出我的问题,所以我找不到太多信息,所以我会解释:
我有一个node.js应用程序,它在端口8081上托管一个restify / express api。 这个api在端口8083上托管了一个websocket服务器。
所有这一切都通过指定端口在localhost上运行得非常好,但在托管环境中,它需要在端口80 http上运行。 (为简单起见省略443。)
我正在使用AWS Elastic Beanstalk(nginx服务器)。当我部署我的应用程序时,它会创建一个EC2和ELB(负载均衡器)实例。 ELB然后有一个公共dns,我用它来访问端口80上的api。没有配置特殊的监听器(只有80和443)。所以我不确定它如何到达端口8081上的api.EC2实例也只允许80和443。
使用端口80上的ELB公共DNS,api可以正常工作。
现在我已经在那里添加了websocket服务器。
我的问题是 - 我需要在端口80上的另一个公共DNS转到同一个Beanstalk应用程序的端口8083上的套接字服务器。我该如何处理?
我很感激任何想法和想法。
答案 0 :(得分:2)
看起来......
Upgrade
标头。但是,我按照以下方式开展工作:
这将允许访问端口80上的新ALB的流量路由到托管我的应用程序的服务器的端口8083。
.ebextensions
文件中,我添加了以下更新nginx设置以允许websockets所需的Upgrade
标题:添加到.ebextensions
container_commands:
enable_websockets:
command: |
sed -i '/\s*proxy_set_header\s*Connection/c \
proxy_set_header Upgrade $http_upgrade;\
proxy_set_header Connection "upgrade";\
' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
所以基本上我有两个负载平衡器。路由80到8081的默认路由,以及路由80到8083的另一个(ALB)。
这绝不是完美的。自动缩放/负载平衡可能不起作用。但是现在是来自同一个应用程序的API和websocket服务器。