Elastic Beanstalk EC2 实例在端口 5000 和端口 80 上响应 http 请求

Posted

技术标签:

【中文标题】Elastic Beanstalk EC2 实例在端口 5000 和端口 80 上响应 http 请求【英文标题】:Elastic Beanstalk EC2 instance responses http request on both port 5000 and port 80 【发布时间】:2018-02-26 12:46:51 【问题描述】:

我设置了一个 Elastic Beanstalk,负载均衡器将端口 80 转发到 EC2 实例上的端口 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 与运行 EC2 的 Web 服务器位于同一子网上。 http 请求不应通过任何路由器,也不应通过负载平衡器。但是网络服务器在端口 5000 上运行,而不是端口 80。

是否有 nginx 实例在带有 webserver 的 EC2 实例上运行?

如果我将网络服务器配置为侦听端口 80 并让弹性负载均衡器将端口 80 转发到 EC2 实例上的端口 80,我在执行 curl 请求时得到 Nginx 502 错误网关响应

卷曲 172.31.14.151:80

【问题讨论】:

【参考方案1】:

您是否检查过您使用的安全组上的inbound rules?

是否有 Nginx 实例在带有 webserver 的 EC2 实例上运行? - 是的。创建新环境时,可以选择预配置的平台,选择NodeJS Platform。

如果你的应用是异构应用,最好使用容器。您可以在 Elasticbeanstalk 上部署您的容器化应用程序,或者改用 Elastic Container Service。

【讨论】:

【参考方案2】:

我不知道您使用的是哪个Elastic Beanstalk Solution Stack,但大多数 AWS 解决方案堆栈默认都与代理服务器相结合。例如,如果您正在运行 Java SE,则代理服务器是 NGINX,但如果您正在运行 Java with Tomcat,则代理服务器是 Apache。

默认情况下,这些代理在默认 HTTP 端口 (80) 上接受 HTTP 流量,管理连接,然后代理来自支持应用程序服务器的请求(在您的情况下,端口 5000)。这有助于管理与支持应用程序的连接,以及提供静态内容,或者如果您正确配置它们,则可以根据 HTTP 状态代码自定义错误消息。我建议如果可以的话,将负载均衡器流量发送到端口 80,因为 Apache 或 NGINX 通常可以比大多数自定义应用程序更好地处理连接负载。

【讨论】:

在 Elastic Beanstalk 中创建环境时,预配置平台有很多选择。其中包括 Java 和 Tomcat。我选择Java。在 EC2 上,我在 /var/log 下看到了 nginx、x-ray 文件夹。所以它是一个Java SE。由于 nginx 和 webserver 运行在同一个 EC2 上,而我只有一个 SpringBoot webserver 在 EC2 上运行,Nginx 如何帮助处理 EC2 上的连接负载? 是的,nginx 可以在多个实例之间进行负载均衡,但即使在基础级别,它也会对请求和响应进行缓冲。想象一下,您有一个客户端尝试连接到您的系统,但连接速度很慢,并且他们正在上传一个文件。如果您没有代理服务器,它将直接连接到您的应用服务器,并开始使用您的一个连接。使用代理服务器,它将首先接受请求,然后打开与应用服务器的连接,并将值传递给它。由于它们在同一台机器上,因此速度很快。它还以相同的方式缓冲响应。

以上是关于Elastic Beanstalk EC2 实例在端口 5000 和端口 80 上响应 http 请求的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk:在同一可用区创建 EC2 和 RDS 实例

将 EC2 安全组限制为 Elastic Beanstalk 实例

Elastic Beanstalk EC2 实例在端口 5000 和端口 80 上响应 http 请求

如何查看哪些 EC2 实例与我的 Elastic Beanstalk 应用程序相关联?

新 EC2 实例 (Elastic Beanstalk) 上的 Composer 失败

我无法在 Elastic Beanstalk ec2 实例上找到生产日志文件