Amazon web services 当我尝试访问ELB DNS时,为什么会得到502
我正尝试在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应用程序的启动配置,我使用标准的转发头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实例上连接了一个安全组,允许来自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文件,专门用于我的应用程序,它以我想要的方式路由流量) 我还做了以下工作来简化我对每个角色的意图:
startup.cs
更改为notUseHttpRedirection
;同样,SSL终止于ELB所有这些因素的结合解决了我的问题。我在这方面取得了一些进展。问题似乎出现在Kestrel+Nginx方面(即AWS设置没有任何问题)。我已经重新编写了一些nginx配置文件,并取得了一些进展;现在我正在努力确保Kestrel和Nginx之间的对话顺利进行,这样Nginx就可以充当反向代理,同时保持Kestrel中HTTP侦听器的流量完整性。