AWS ElasticBeanstalk NodeJS-502错误:从上游读取响应头时,recv()失败(104:对等连接重置)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWS ElasticBeanstalk NodeJS-502错误:从上游读取响应头时,recv()失败(104:对等连接重置)相关的知识,希望对你有一定的参考价值。

我们计划将NodeJS平台从纯EC2迁移到ElasticBeanstalk。在这些过程中,经过一些努力,我们已经部署了应用程序并能够访问和执行操作。但是,对于某些请求,我们接收到502错误

检查日志后,我们发现以下内容;


/ var / log / nginx / error.log

2020/03/16 06:12:09 [错误] 3009#0:* 119488 recv()失败(104:对等方重置连接),同时从上游读取响应标头,客户端:xxx.xx.xx.xxx,服务器:,请求:“ POST / www_auth / register HTTP / 1.1”,上游:“ http://127.0.0.1:8081/register”,主机:“ ****。us-east-2.elasticbeanstalk.com”

它是随机发生的,我没有任何线索。我觉得我想/需要使用Nginx添加一些配置级别的更改。

如果您有任何步骤/建议来解决此问题,请感激!

答案

AWS Elastic Load Balancer预先连接到后端服务器,它可能导致竞争状态,ELB认为连接已打开,但是由于闲置5秒的server.keepAliveTimeout,Node.js后端已经关闭了该连接不活动,Node.js 8.x及更高版本中的默认值。

禁用server.keepAliveTimeoutserver.headersTimeout来解决此问题,或将这些超时设置为大于AWS ELB的“空闲超时”值的ms值。

const app = express();

// Set up the app...
const server = app.listen(8080);

// Disable both timeouts
server.keepAliveTimeout = 0;
server.headersTimeout = 0;

此解决方案的信用归香川修平:

https://shuheikagawa.com/blog/2019/04/25/keep-alive-timeout/

以上是关于AWS ElasticBeanstalk NodeJS-502错误:从上游读取响应头时,recv()失败(104:对等连接重置)的主要内容,如果未能解决你的问题,请参考以下文章

为啥有些用户在 AWS ElasticBeanstalk 中部署后没有体验到更新?

如何访问部署在 aws elasticbeanstalk 中的文件

AWS Elasticbeanstalk 在 PHP 实例类型中安装节点和 npm

AWS ElasticBeanstalk Multidocker 没有使用正确的 Cmd 创建 ECS 任务

带有 ALB 和 Socket.IO 的 AWS ElasticBeanstalk 上的 HTTP 400 错误

如何从部署在 AWS Elastic beanstalk 上的 node.js express 应用程序获取客户端 IP?