Mut*_*ani 4 nginx node.js amazon-elastic-beanstalk
我们计划将我们的 NodeJS 平台从普通的 EC2 迁移到 ElasticBeanstalk。在这些过程中,经过一些努力,我们已经部署了我们的应用程序并且能够访问和执行操作。但是,对于某些请求,我们收到了 502 错误。
检查日志后,我们发现了以下内容;
2020/03/16 06:12:09 [error] 3009#0: *119488 recv() failed (104: Connection reset by peer) 从上游读取响应头,客户端: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 认为连接打开的竞争条件,但 Node.js 后端已经关闭它,因为server.keepAliveTimeout空闲不活动 5 秒, Node.js8.x
和更新版本中的默认值。
禁用server.keepAliveTimeout
并server.headersTimeout
解决此问题,或将这些超时设置为ms
大于 AWS ELB 的空闲超时值的值。
const app = express();
// Set up the app...
const server = app.listen(8080);
// Disable both timeouts
server.keepAliveTimeout = 0;
server.headersTimeout = 0;
Run Code Online (Sandbox Code Playgroud)
此解决方案归功于 Shuhei Kagawa:
https://shuheikagawa.com/blog/2019/04/25/keep-alive-timeout/
归档时间: |
|
查看次数: |
1238 次 |
最近记录: |