nginx 在错误日志中返回 499 和 110:连接超时

nginx 在错误日志中返回 499 和 110:连接超时

我无法克服 nginx 60 秒超时问题。如果我直接以 8000 的速度访问节点服务器,它可以正常工作,但通过 nginx 作为反向代理,它总是在 60 秒后超时。我已经尝试了我在谷歌之旅中读到的关于这个问题的所有超时设置……

有人能帮助我吗?

干杯

重现的最小步骤:

   server {
     listen 80;
     server_name someserver.net;
 
     location / {
       proxy_pass http://127.0.0.1:8000; 
       proxy_connect_timeout 75s;
       proxy_send_timeout 900s;
       proxy_read_timeout 900s;
       send_timeout 900s;
       client_body_timeout 900s;
       keepalive_timeout 900s;
     }
   }

最小的 node.js 服务器:

 const http = require('http');
 const server = http.createServer((req, res) => {
   const match = req.url.match(/timeout=(\d+)/);
   const timeout = (match ? parseInt(match[1]) || 60 : 60) * 1000;
 
   setTimeout(() => {
     res.writeHead(200, {'Content-Type': 'text/plain'});
     res.write('Response');
     res.end();
   }, timeout);

 }).listen(8000, "0.0.0.0");
 
 server.timeout = 15 * 60 * 1000;
# direct connection: works
curl -v "http://someserver.net:8000?timeout=65"

# timeout of 59s via proxy: works
curl -v "http://someserver.net?timeout=59"
 
# timeout > 60s via proxy: times out
curl -v "http://someserver.net?timeout=61"

答案1

如果有人遇到这个问题:事实证明你需要增加

client_header_timeout

和/或

客户端主体超时

就我的情况来说,其他一切都失败了。

相关内容