NIr*_*odi 8 nginx amazon-web-services
我知道这个问题被问过多次并且与 aws 无关。
2020/07/29 10:23:17 [error] 6#6: *37749 connect() failed (113: Host is unreachable) while connecting to upstream, client:
Run Code Online (Sandbox Code Playgroud)
当我在 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;
}
Run Code Online (Sandbox Code Playgroud)
上游部分如下
upstream test-service {
server test-service.internal:38102;
keepalive 10;
}
Run Code Online (Sandbox Code Playgroud)
这test-service.internal是我的route53托管区域条目,它指向一些internal application load balanceraws。
当我部署/重新启动 nginx 服务器时,它运行良好,但几天后(大约两/三天)它只会挂在代理通道中。当我加载 html 内容时,它工作正常,但代理传递调用卡住了。
任何解决方案会有帮助吗?
谢谢。
经过长时间的调试,我们发现nginx会缓存test-service.internalips。AWS 将更改其内部负载均衡器的 ip。
所以nginx缓存的ips不再存在。所以我们需要提供新的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 "";
}
Run Code Online (Sandbox Code Playgroud)
我们改变了两件事。
添加了解析器。
删除了上游(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;
Run Code Online (Sandbox Code Playgroud)
现在我们使用 aws dns 服务器每 30 秒10.0.0.2解析一次test-service.internal
| 归档时间: |
|
| 查看次数: |
10541 次 |
| 最近记录: |