12

我一直在为这个超时问题挠头,希望能得到一些帮助。我有一个可能需要 2.5 分钟才能返回响应的 http 请求。我在 Angular 中进行了 3 分钟的超时处理,在 NodeJS 中也进行了 3 分钟的处理。我的 nginx 设置有 200 秒超时,我的 Elastic Load Balancing 连接超时设置为 4 分钟。但是,我在 2 分钟后一直看到 502 bad gateway nginx 1.4.6 (Ubuntu) 错误。有没有我想念更长的超时时间的部分?

我的 nginx 设置:

server {
    listen 80;
    server_name;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log debug;
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_set_header Connection "";
        proxy_http_version 1.1;
        proxy_pass http://localhost:8060;
        proxy_redirect off;
        proxy_connect_timeout 200s;
        proxy_send_timeout 200s;
        proxy_read_timeout 200s;
        send_timeout 200s;
    }
    #Handle protected assets using 'internal' directive documented here: https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/
    location /protected {
        internal;
        expires -1;
    }
}

我的 NodeJS 设置正在使用连接超时

var timeout = require('connect-timeout');
app.use(timeout(300000));
4

1 回答 1

11

我今天刚刚遇到这个问题,可能找到了答案——节点http模块中有 120 秒的硬编码超时。我必须在给定的请求处理程序中设置套接字超时,如下所示:

yourHandler(req, res) {
  req.socket.setTimeout(3600e3); // 1 hour

  // ... do the real work

  res.json(...);
}

您还可以将此限制设置0为禁用此超时。

https://nodejs.org/api/net.html#net_socket_settimeout_timeout_callback

最初在这里找到了答案:https ://forum.nginx.org/read.php?2,214230,214239#msg-214239

于 2017-09-11T13:39:06.440 回答