首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Amazon ELB背后的NodeJs应用程序抛出502

Amazon ELB背后的NodeJs应用程序抛出502
EN

Stack Overflow用户
提问于 2017-08-11 12:03:57
回答 3查看 3.6K关注 0票数 14

我们有一个在Amazon Elastic Load Balancer (ELB)后面运行的节点应用程序,当有多个并发请求以及每个请求需要时间处理时,它会随机抛出502个错误。最初,我们试图将ELB的空闲超时时间增加到5分钟,但仍然收到了502个响应。

当我们联系亚马逊团队时,他们说这是因为后端在5秒后关闭了与ELB的连接。

出于以下原因,ELB会将HTTP-502发送回您的客户端:

  • 负载平衡器在尝试建立连接时收到来自目标的TCP。当负载平衡器有对目标的未完成请求时,目标
  • 关闭了与TCP或TCP的连接。
  • 目标响应的格式不正确或包含无效的HTTP头。
  • 使用了新的目标组,但尚未有目标通过初始运行状况检查。目标必须通过一次健康检查才能被视为健康。

我们尝试将应用程序的keep-alive/ timeout设置为大于ELB空闲超时(5分钟),这样ELB就可以负责打开和关闭连接。但是,我们仍然面临着502个错误。

js:

代码语言:javascript
复制
var http = require( 'http' );
var express = require( 'express' );
var url = require('url');
var timeout = require('connect-timeout')

const app = express();

app.get( '/health', (req, res, next) => {
  res.send( "healthy" );
});

app.get( '/api/test', (req, res, next) => {
  var query = url.parse( req.url, true ).query;
  var wait = query.wait ? parseInt(query.wait) : 1;
  setTimeout(function() {
    res.send( "Hello!" );
  }, wait );
});

var server = http.createServer(app);
server.setTimeout(10*60*1000); // 10 * 60 seconds * 1000 msecs
server.listen(80, function () {
  console.log('**** STARTING SERVER ****');
});
EN

回答 3

Stack Overflow用户

发布于 2017-12-27 11:44:05

尝试将server.keepAliveTimeout设置为默认5s以外的值。请参阅:https://nodejs.org/api/http.html#http_server_keepalivetimeout根据AWS文档,您可能希望该值大于负载均衡器的空闲超时。

注意:这是在Node v8.0.0中添加的

此外,如果你还在使用Classic ELB,考虑转移到新的应用程序负载均衡器,因为根据目前的经验,这似乎对我们有很大的改善。如果你每项服务都有很多独立的ELB,你也可以节省一些钱。缺点可能是你的所有服务都有一个故障点。但在AWS中,我们信任:)

票数 12
EN

Stack Overflow用户

发布于 2019-09-03 03:24:36

在我的例子中,我需要升级nodejs版本:

https://github.com/nodejs/node/issues/27363

在那之后,问题就解决了。

票数 1
EN

Stack Overflow用户

发布于 2019-04-22 04:31:39

将您的server.listen()更改为:

代码语言:javascript
复制
const port = process.env.PORT || 3000;
const server = app.listen(port, function() {
  console.log("Server running at http://127.0.0.1:" + port + "/");
});

您可以阅读有关此here的更多信息。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45626787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档