Node.js 正在获取504网关\u超时节点

Node.js 正在获取504网关\u超时节点,node.js,amazon-web-services,express,Node.js,Amazon Web Services,Express,页面加载60秒后,我收到504网关\u超时http响应 正在加载的不是实际页面,而是正在执行的进程。我预计这将需要60秒以上的时间,我已经尝试增加超时值,但没有帮助 我使用express framework进行路由,并在EB(AWS Elastic Beanstalk)上主持作业。由于我增加了在AWS控制台中的EB和负载平衡器上可能找到的所有超时值,所以我假设超时设置为60秒的一定是应用程序本身。然而,我可能错了 我的代码: /* GET home page. */ router.get('/m

页面加载60秒后,我收到
504网关\u超时
http响应

正在加载的不是实际页面,而是正在执行的进程。我预计这将需要60秒以上的时间,我已经尝试增加超时值,但没有帮助

我使用express framework进行路由,并在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);
也没用

更新2: 我还尝试在
/bin/www
中增加超时时间,如下所示:

var server = http.createServer(app);
server.timeout=600000;
更新3: 我注意到超时与nginx配置有关。正如我的日志所说:
读取响应头时上游超时(110:连接超时)

但是,我想不出在Elastic beanstalk上编辑nginx配置的方法。我做了一些研究,但对我来说,这一切似乎都不标准,对这么简单的事情来说太死板了。

通常当一项工作需要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;

在.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

根据您的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;
    }
}

代理读取超时和代理发送超时与您的问题有关。

我也有同样的问题,所以我尝试将超时设置为120000,如下所示:

var server=http.createServer(app).listen(端口,函数()
{
log(“在端口上侦听的Express服务器”+端口)
})
server.timeout=120000;

尝试在函数请求参数中使用如下连接超时包:
var timeout=require('connect-timeout');app.post('/test',timeout('6s'),function(req,res,next){console.log('test')})
谢谢你,但是我看不到我在哪里可以这样做,因为我没有
app.post
。express框架的做法有所不同。只有
app.use('/',routes)
这只是您在回答时的第一个代码中的一个示例,将其放在请求函数之前,如下所示:
/*获取主页。*/var timeout=require('connect-timeout');get('/main',timeout('6s'),函数(req,res,next){mainProcess(res);//res.send(“调用mainProcess());})尝试过,仍然是相同的问题。您是否检查了请求是否命中nodejs?如果您可以访问nginx conf文件,例如:
location/{proxy\u passhttp://localhost:8000;proxy_set_header Host$Host;proxy_set_header X-Real-IP$remote_addr;proxy_connect_timeout 60s;//这里是放置超时的位置}
感谢您的帮助out@OndrejTokar我昨天做了一些测试,我也找不到解决方案,如果你找到了,请发布答案!谢谢你花时间在这上面。请查看我的最新更新。这完全解决了我的问题。如果您正在复制和粘贴上述内容(像我一样),则需要在容器_命令之前删除多余的空格。根据,默认情况下,超时时间应为120000ms,因此此代码不应执行任何操作。我花了4天时间进行调试,直到找到这块黄金