1.问题现象
我们使用nginx的时候,用到了nginx的反向代理功能。为了方便管理。后端站点或者服务一般都用的域名来表示。后端用的是aws的slb.
有一天后端业务突然不通了,走 Nginx 怎么也访问不了后端,而在 Nginx 机器上直接 curl 后端是没有问题的。
原因:
当时正好需要新增加个nginx配置,然后需要reload下,不经意的把上面的问题解决了。
经过询问aws相关人员,aws 切换过slb的ip。而nginx是有dns缓存的。所以在aws更换ip后nginx 代理不到后端。
解决:
1.在aws更新ip后,立刻重载nginx刷新缓存。太费事
2.使用nginx的resolver
在原来的 Nginx 配置里指定 DNS IP,并设置缓存 60 秒。缓存到期后会再次到dns服务器获取
server {
listen 80;
server_name www.test.com;
resolver 127.0.0.1 valid=60s;
resolver_timeout 3s;
set $proxy_url "proxy.test.com";
location / {
proxy_set_header Host proxy.test.com;
proxy_pass http://$proxy_url;
}