获取504 GATEWAY_TIMEOUT NodeJs

时间:2016-07-14 12:33:54

标签: node.js amazon-web-services express

我在页面加载60秒后收到504 GATEWAY_TIMEOUT http响应。

它不是正在加载的实际页面,而是正在执行的进程。我预计它需要超过60秒,我试图增加超时值,但它没有帮助。

我使用快速框架进行路由,并在EB(AWS Elastic Beanstalk)上托管作业。由于我已经增加了我可能在AWS控制台中的EB和负载均衡器上找到的所有超时值,我认为它必须是应用程序本身的超时设置为60秒。但是,我可能错了。

我的代码:

/* GET home page. */
router.get('/main',function(req, res, next) {
req.connection.setTimeout(600000);
        mainProcess(res);
        //res.send("mainProcess() called");
    });

更新

除此之外,我尝试了不同的方法。我将此代码添加到app.js

var connectTimeout = require('connect-timeout');
var longTimeout = connectTimeout({ time: 600000 });
app.use(longTimeout);

也没有帮助。

UPDATE2: 我也试过像这样增加/bin/www中的超时:

var server = http.createServer(app);
server.timeout=600000;

UPDATE3: 我注意到超时与nginx配置有关。正如我的日志所说:upstream timed out (110: Connection timed out) while reading response header 但是,我无法找到在Elastic beanstalk上编辑nginx配置的方法。我做了一些研究,但这对我来说似乎都不合标准,对于这么简单的事情来说太严格了。

4 个答案:

答案 0 :(得分:4)

从您的Update3信息中,我认为您应该配置您的nginx配置文件,例如:

server {
    listen  80;
    server_name     *.*;
    location / {
            proxy_pass http://192.168.0.100:8001;
            proxy_connect_timeout 60s;
            proxy_read_timeout 5400s;
            proxy_send_timeout 5400s;
            proxy_set_header host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_redirect default;
    }
}

proxy_read_timeout和proxy_send_timeout与您的问题有关。

答案 1 :(得分:3)

通常当作业超过30秒或40秒时,我通常会通知正在执行的用户然后创建一个处理数据库的进程而不是对服务器的正常请求,以避免用户等待请求并避免超时问题,例如,当您将服务器设置为侦听指定端口时,可以尝试此操作:

//Create server with specified port
var server = app.listen(app.get('port'), function() {
  debug('Express server listening on port ' + server.address().port);
});
//set timeout time
server.timeout = 1000;

答案 2 :(得分:3)

在.ebextensions配置文件中,添加以下代码:

container_commands:
  change_proxy_timeout:
    command: |
      sed -i '/\s*location \/ {/c \
              location / { \
                  proxy_connect_timeout       300;\
                  proxy_send_timeout          300;\
                  proxy_read_timeout          300;\
                  send_timeout                300;\
              ' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf

答案 3 :(得分:1)

我有同样的问题,所以我尝试设置timeout = 120000,如下所示:

var server= http.createServer(app).listen(port, function()
{
    console.log("Express server listening on port " + port)
})
server.timeout = 120000;