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

问题描述 投票:0回答:1

我们计划将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添加一些配置级别的更改。

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

node.js nginx amazon-elastic-beanstalk
1个回答
0
投票

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/

© www.soinside.com 2019 - 2024. All rights reserved.