我知道这个问题被问过多次并且与 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
的。当我部署/重新启动 nginx 服务器时,它运行良好,但几天后(大约两/三天)它只会卡在代理传递中。当我加载 html 内容时,它运行良好,但代理传递调用卡住了。
任何解决方案都会有帮助吗?
谢谢。
最佳答案
经过长时间的调试,我们发现nginx会缓存test-service.internal
ips。 aws 会改变它的内部负载均衡器的 ip。
所以nginx缓存的ips不再存在。所以我们需要提供新的ips。
解决方案:
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 "";
}
我们改变了两件事。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 服务器
10.0.0.2
解决 test-service.internal
每 30 秒后
关于amazon-web-services - 连接()失败(113 : Host is unreachable) while connecting to upstream nginx for aws,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63154521/