间歇性502坏网关错误(使用nginx,nodejs,mongodb)

时间:2014-08-02 06:44:43

标签: node.js express nginx

我们正在使用nodejs(v 0.10.29),express,nginx(版本1.4.6)和mongodb(v 2.6.3)replicaset并获得间歇性的502错误网关错误。虽然nginx aerror.log正在显示

,但pm2日志可以记录记录
recv() failed (104: Connection reset by peer) while reading response header from     upstream, client: xxx.xxx.xxx.xxx, server: somedomain.com, request: "GET /img/abc.png HTTP/1.1", upstream: "http://127.0.0.1:3000/img/abc.png", host: "domain.com", referrer: "http://domain.com/admin/"

和access.log说:

"GET /url/abc.html HTTP/1.1" 502 723 "http://domain.com/admin/" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36"

任何人都可以指导我解决这个问题吗?

2 个答案:

答案 0 :(得分:11)

这可能不是nginx本身的问题,但更多的是nodejs的问题。 502坏网关错误意味着nginx向nodejs服务器询问了一些信息,并且nodejs服务器已经应答,然后"立即挂断电话。" "挂了电话"更多的是通过同行"连接重置"消息的一部分。

现在,这可能表明存在许多不同的问题,因此我无法给出明确的答案。

可能是处理请求时出现了实际错误,这需要通过js代码跟踪错误。

这可能是内存问题(你的内存使用情况如何)?

或者它可能是节点部分的超时错误,要么是因为返回答案花了太长时间,要么因为代码有问题,或者因为系统内存不足。

我知道我曾经在nginx和php-fpm之间出现间歇性的超时错误,因为nginx会放弃等待php。我调整了内存使用量和超时设置来修复它(我优化了PHP代码)。

如果您可以提供有关内存/负载使用情况或来自节点或应用程序的日志的更具体信息,或者甚至是502错误中的一般模式(它是否已本地化到地理区域,浏览器,操作系统?),那么答案可能不那么具有推测性。

答案 1 :(得分:0)

在服务器到服务器的连接上发生了这种情况。 Node.js服务器正在Nginx打包300-400个子弹,如:

get http://example.com/?a=1&b=2&c=3

第二个人无法按时回复,放弃说502

我遇到的解决方案是在较小的块中逐个发送请求。