我有一个 NGINX 实例设置为多个应用程序的反向代理,每个应用程序都在 NGINX 配置中设置为自己的服务器。
目前的配置非常简单:
listen 80;
listen 443 ssl;
server_name example.com;
access_log /var/log/nginx/access.log main;
proxy_set_header Host $http_host;
location ~ .*/url1/.* {
allow xx.0.0.0/8;
deny all;
proxy_pass http://aws-balender-cname-url;
}
location ~ / {
proxy_pass http://aws-balencer-cname-url;
}
其中一个应用程序大约在一周的同一时间停止工作一次,当我检查 NGINX 访问日志时,它的响应主要为 499(客户端关闭请求),偶尔会出现 502 和 504。所有其他应用程序都正常。
NGINX 错误日志有以下条目:
连接到时上游超时(110:连接超时)
如果我查看托管应用程序的上游服务器(Microsoft IIS,通过 AWS ELB),它看起来很好,它没有负载,请求只是停止通过。
我解决这个问题的方法是重新加载 NGINX 配置,问题不再发生,但这是一个糟糕的解决办法。
对于问题所在,您有什么建议吗?或者如何诊断?
NGINX AWS-ELB IIS 链中是否存在可能导致问题的东西?
答案1
由于这仍然是一个悬而未决的问题,而且我已经找到了原因,所以就在这里。
您的配置中proxy_pass
设置为 DNS 名称而不是 IP 地址。
启动时nginx
,它会解析 DNS 名称并在内部缓存其 IP 地址,并一直使用它直到下次重启。
解决方案是使用resolver
具有有效参数的指令。