nginx+nodejs搭配出现的问题【已解决】
发布于 7个月前 作者 cekimy 1339 次浏览

最近监控发现nginx+nodejs做的webservice接口有些失败率,查看nginx日志发现了问题,但不知道原因特来求解 两地机房A和B,每地都是4台机器,nginx里upstream配的 upstream nodejs{ server 192.168.10.100:8888; server 192.168.10.101:8888 backup; server 192.168.10.102:8888 backup; server 192.168.10.103:8888 backup; } 都是连本机的node,同机房的其他3台作为backup 查看了一天的日志,A、B两个机房的机器每天都是60多w条请求记录,但是现在A机房的机器没有错误,而B机房的机器,每台都差不多有500条左右no live upstreams while connecting to upstream的错误。 按照我的理解,这个错误应该是upstream里的4台node都连不上?但感觉这个不太可能啊。。。两地的配置都一样,为什么就B机房有这种情况 现在没有什么解决的头绪。。。不知道有谁也遇到过这种情况

1 回复

找到原因了,是因为node的http server不支持url中有空格的(未编码),这种请求进来,对于nginx来说,就是后端的node不可用,而上面的upstream没有配max_fails,一次就被标记为失败了,这个时候后面跟着的同一nginx进程上的请求就会no live upstreams~ 从错误日志也可以看出,每次no live upstreams while connecting to upstream错误都是紧跟在4条upstream prematurely closed connection while reading response header from upstream错误后的,而后者这个错误都是由于url里有未编码的空格引起的,解决办法就是调大max_fails,调低fail_timeout,不过这个方法不彻底。。。最好是别用http建server,用net,虽然这个问题是因为url不规范,但是没法限制用户要这么传,而且即使不规范也不能造成问题。。。

回到顶部