一些nginx反向代理configuration每天停止工作一次

我有一个nginx反向代理服务器,它将来自外部亚马逊ELB的请求代理到内部ELB。

我有6个后端实例处理请求。 站点启用configuration看起来像这样,但有不同的端口号和proxy_pass。 其他一切都是一样的:

server { listen 3000; location / { proxy_pass http://internal-prod732r8-PrivateE-1GJ070M0745TT-348518554.eu-west-1.elb.amazonaws.com:3000; include /etc/nginx/proxy.conf; } 

}

每24小时一次configuration停止工作。 所有其他代理工作正常。 如果我重新启动nginx,所有configuration再次工作。 error.log中没有任何内容,访问日志,系统日志或dmesg中没有什么奇怪的。

这个东西是已知的吗? 我的代理configuration有问题吗? 有没有其他的日志我可以看?

这个问题的答案是,ELB有时会改变ip地址,nginx会在启动时进行名称parsing。

为了解决这个问题,你的VPC中总是有一个DNS服务器在0.2。 所以如果本地IP CIDR是10.0.0.0/16,那么DNS服务器是10.0.0.2。

将此添加到nginxconfiguration。

 resolver 10.0.0.2 valid=10s; 

proxy_pass也需要被定义为一个variables,否则nginx只会parsing一次。 所以根据上面的configuration,这是正确的configuration:

 server { listen 3000; location / { resolver 10.0.0.2 valid=10s; set $backend "http://internal-prod732r8-PrivateE-1GJ070M0745TT-348518554.eu-west-1.elb.amazonaws.com:3000" proxy_pass $backend; include /etc/nginx/proxy.conf; } } 

如果您的proxy_pass没有像您的示例( http://amazonaws.com )那样直接传递给一个URL,而是直接传递到代理上游服务器场,如下所示:

 upstream my_upstream { server1 127.0.0.1:1337; server2 127.0.0.1:1338; } location / { proxy_pass http://my_upstream; } 

那么你就不会担心上游的一个暂时失败。 因为他们都会做同样的工作。 如果不答复,那么下一个将被代理回应。 内心的平静。

Nginx会自动跳过一个失败的机器x秒。 直到你修复它,或直到它自行返回。 ( http://wiki.nginx.org/HttpUpstreamModule

所以无论中断的原因是什么,通过将它们分配到上游农场,这转换成更简单的设置。