我知道这个问题被问过多次,并且与aws无关。
2020/07/29 10:23:17 [error] 6#6: *37749 connect() failed (113: Host is unreachable) while connecting to upstream, client:
我在AWS云中部署了Nginx时遇到了这个问题。
定位配置
location /test {
proxy_pass http://test-service;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
上游部分如下
upstream test-service {
server test-service.internal:38102;
keepalive 10;
}
这test-service.internal
是我的route53托管区域条目,它指向一些internal application load balancer
aws。
当我部署/重启nginx服务器时,它运行良好,但是几天(大约两三天)后,它将仅挂在代理阶段。当我加载html内容时,它可以正常工作,但代理pass调用卡住了。
有什么解决方案会有所帮助吗?
谢谢。
经过长时间的调试,我们发现nginx将缓存test-service.internal
ips。并且aws会更改其内部负载平衡器的ips。
因此,nginx缓存的ip不再存在。因此我们需要提供新的IP。
解:
nginx提供了resolver
指令
location /test {
resolver 10.0.0.2 127.0.0.1 valid=30s;
set $backend_servers test-service.internal;
proxy_pass http://$backend_servers:38102;
#proxy_pass http://test-service;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
我们已经改变了两件事。
添加了解析器。
已删除上游(nginx不支持解析器。nginx-plus支持带有解析器的上游)
resolver 10.0.0.2 127.0.0.1 valid=30s;
set $backend_servers test-service.internal;
proxy_pass http://$backend_servers:38102;
现在我们使用aws dns服务器每30秒进行一次10.0.0.2
解析test-service.internal
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句