Amazon web services 当我尝试访问ELB DNS时,为什么会得到502

Amazon web services 当我尝试访问ELB DNS时,为什么会得到502,amazon-web-services,nginx,amazon-ec2,.net-core,kestrel-http-server,Amazon Web Services,Nginx,Amazon Ec2,.net Core,Kestrel Http Server,我正尝试在EC2实例上使用以下设置(从上到下)托管ASP.NET核心应用程序。根据下面的设置,我获得了EC2实例和目标组的运行状况。此外,如果我在服务器上检查Kestrel服务的状态,我可以看到来自目标组健康检查的传入请求以及200个响应 我遇到的问题是,如果我访问ELB的DNS端点,就会得到502(坏网关)响应。为什么会这样?特别是因为我在web服务器上看到了健康检查请求,收到了200个响应但是,我没有看到针对ELB DNS端点明确发出的请求。就像对ELB DNS端点的请求从未真正到达web服

我正尝试在EC2实例上使用以下设置(从上到下)托管ASP.NET核心应用程序。根据下面的设置,我获得了EC2实例和目标组的运行状况。此外,如果我在服务器上检查Kestrel服务的状态,我可以看到来自目标组健康检查的传入请求以及200个响应

我遇到的问题是,如果我访问ELB的DNS端点,就会得到502(坏网关)响应。为什么会这样?特别是因为我在web服务器上看到了健康检查请求,收到了200个响应但是,我没有看到针对ELB DNS端点明确发出的请求。就像对ELB DNS端点的请求从未真正到达web服务器一样

另一件不需要考虑的事情是,我在一个公共子网中有一个跳转服务器,该子网与容纳EC2实例的私有子网位于同一个VPC中。我能够从跳转服务器向专用IP发出请求,并使用我的登录html返回200响应。似乎web服务器上的所有内容都是正确的;除此之外的东西出了问题

53号公路

我正在为我的域使用Route 53托管区域。HZ有一个指向弹性负载平衡器的A记录

弹性负载平衡器

来自域(在端口HTTP和HTTPS上)的流量被路由到侦听HTTP(80)和HTTPS(443)的应用程序负载平衡器。HTTPS通信具有证书管理器分配的公共SSL证书。HTTPS通信在此终止,并作为HTTP传递给底层实例

ELB目标群体

我有一个指向指定实例的目标组。对于目标组,我将目标锁定在正在运行的应用程序的登录页面上,并期望得到200个响应

自动缩放组

我有一个指向ELB目标群体的ASG

Web服务器

对于web服务器,我正在运行一个AmazonLinux2AMI实例,Kestrel在一个Nginx反向代理后面运行。Kestrel服务托管在端口5000(HTTP)上运行的ASP.NET MVC应用程序

EC2实例位于专用子网中。在同一VPC和AZ内有一个公共子网,并连接了一个Internet网关

对于.NETCore应用程序的启动配置,我使用标准的转发头


EC2实例上连接了一个安全组,允许来自ELB安全组的HTTP和HTTPS流量以及来自同一VPC中公共子网中跳转框的SSH流量。

我想知道这是否是因为发送到NGINX的头太大?您可以通过更改以下配置来增加NGINX中允许的大小

nginx.conf

http{
...
proxy_buffer_size   128k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;
large_client_header_buffers 4 16k;
...
}
default.conf

location /{
    ...
    fastcgi_buffers 16 16k;
    fastcgi_buffer_size 32k;
    ...
}

我最终发现我的Nginx配置与ELB配置冲突。我最终将nginx.conf恢复到其初始状态,并在conf.d文件夹下提供了更清晰定义的自定义配置(我在这里创建了一个.conf文件,专门用于我的应用程序,它以我想要的方式路由流量)

我还做了以下工作来简化我对每个角色的意图:

  • 由于SSL终止于ALB,我修改了Kestrel,不再监听443(HTTPS)流量;它只侦听80(HTTP)流量。目前,这还可以,因为VPC中没有任何其他成员会因为经过ELB的HTTP流量而构成安全威胁。在ELB上方,所有内容仍然是加密的

  • 我添加了一个ELB侦听器,该侦听器侦听443和80流量,并将其转发给只针对80个流量的目标组(记住,Kestrel现在只查找80个流量)

  • 我还需要将
    startup.cs
    更改为not
    UseHttpRedirection
    ;同样,SSL终止于ELB


  • 所有这些因素的结合解决了我的问题。

    我在这方面取得了一些进展。问题似乎出现在Kestrel+Nginx方面(即AWS设置没有任何问题)。我已经重新编写了一些nginx配置文件,并取得了一些进展;现在我正在努力确保Kestrel和Nginx之间的对话顺利进行,这样Nginx就可以充当反向代理,同时保持Kestrel中HTTP侦听器的流量完整性。