我的服务器是node.js,我使用nginx作为反向代理。
现在我必须做一个耗时的https请求,但我总是得到504网关超时错误。和nginx / error.log说:
“上游超时”
所以我将nginx conf更改为:
proxy_read_timeout 600;
proxy_connect_timeout 600;
client_max_body_size 32M;
client_body_buffer_size 512k;
proxy_send_timeout 600;
proxy_buffers 32 4k;
这次将没有504错误,但它将变为502错误,并且nginx /错误说:
“上游过早关闭连接”
我发现错误将在我开始120s的请求后出现
我的请求过程肯定会超过120秒,因为它会做一个耗时的mysql查询。
所以我不知道如何摆脱502错误。
答案 0 :(得分:5)
根据您的描述,您的问题现在在服务器上。您需要在nginx和Web服务器上设置超时。 默认情况下,节点的默认超时为2分钟。
查看server.setTimeout选项:http://nodejs.org/api/http.html#http_server_settimeout_msecs_callback
希望这有帮助。
答案 1 :(得分:0)
起初您得到504,这是因为配置错误。然后,您将其修复。
然后您得到502,这通常意味着服务器由于读取时间有限而关闭或读取超时。
两种方式:
1,调整客户端的HTTP阅读时间,或者调整Nginx允许的最大阅读时间限制,通常是前者。
2,优化您的请求中的sql。 2分钟过长通常可能会被Mysql杀死。