我无法克服 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
和/或
客户端主体超时
就我的情况来说,其他一切都失败了。