我在EC2实例上设置了一个Elastic Beanstalk,负载均衡器转发端口80到端口5000。我的EC2实例侦听端口5000,而不是端口80.EC2实例有一个私有IP 172.31.14.151。在另一个与运行Springboot Web服务器的EC2位于同一子网中的EC2上,我得到了以下两个http请求的http响应:
卷曲172.31.14.151:5000
卷曲172.31.14.151:80
我不明白为什么我从172.31.14.15:80获得http响应。我正在运行curl命令的EC2与运行Web服务器的EC2在同一子网上。 http请求不应通过任何路由器,也不应通过负载均衡器。但是网络服务器在端口5000上运行,而不是在端口80上运行。
是否在使用网络服务器的EC2实例上运行了Nginx实例?
如果我将网络服务器配置为侦听端口80并让Elastic loadbalancer将端口80转发到EC2实例上的端口80,那么我从卷曲请求中获得了Nginx 502错误的网关响应
卷曲172.31.14.151:80
答案 0 :(得分:2)
我不知道您正在使用哪个Elastic Beanstalk Solution Stack,但默认情况下,大多数AWS解决方案堆栈都与代理服务器配合使用。例如,如果您正在运行Java SE代理服务器是NGINX,但如果您正在运行Java with Tomcat,则代理服务器是Apache。
默认情况下,这些代理接受默认HTTP端口(80
)上的HTTP流量,管理连接,然后代理来自后备应用程序服务器的请求(在您的情况下,端口5000
)。这有助于管理与后备应用程序的连接,以及提供静态内容,或者如果您正确配置它们,则可以根据HTTP状态代码自定义错误消息。我建议如果可以的话,将负载均衡器流量发送到端口80
,因为Apache或NGINX通常可以比大多数自定义应用程序更好地处理连接负载。
答案 1 :(得分:0)
您是否检查了您使用的安全组的inbound rules?
在使用网络服务器的EC2实例上是否运行了Nginx实例? - 是的。创建新环境时,您可以选择预先配置的平台,然后选择NodeJS Platform。
如果您的应用程序是异构应用程序,最好使用容器。您可以在Elasticbeanstalk部署容器化应用程序,或使用Elastic Container Service代替。