0
点赞
收藏
分享

微信扫一扫

Nginx upstream DNS 解析缓存问题


问题说明

先看现有的配置方式,再说问题:

upstream mydomain {
server www.mydomain.com:8080;
}

如上配置所示,server 中为第三方提供的接口服务地址,提供了互联网域名地址(但是该域名对应的DNS解析IP地址会定期更新)。

当我们把一个域名解析可能会变的域名用作 upstream 中时,就会出现当域名解析IP变更后,ngingx 无法正常反向代理的问题。

根本原因就是 ​​“nginx 只会在服务启动的时对 upstream 中的域名进行一次 lookup 解析并缓存下来,以后没有自动重新解析机制”​​​,即便是你使用 nginx -s reload 也不会触发重新解析,这个​​解析只发生在服务启动时​​。

官网有人在2011年提问过这个问题,详见链接:https://forum.nginx.org/read.php?2,215830,215832#msg-215832

解决方法

  • 方式使用 upstream 方式
  • 通过配置 resolver 和 变量的方式来设定 proxy_pass

具体配置示例,如下:

server {
listen 80;
server_name mydomain.com *.mydomain.com;

# 配置DNS解析服务器和DNS缓存超时时间
resolver 223.5.5.5 valid=300s;
set $proxy_pass_scheme "http";
set $var_proxy_pass "";

location / {
if ($host ~* (test1.mydomain.com|mydomain.com)$) {
set $var_proxy_pass "test1.mydomain.com:8080";
}
if ($host ~* (test2.mydomain.com)$) {
set $var_proxy_pass "test2.mydomain.com:9999";
set $proxy_pass_scheme "https";
}
proxy_pass $proxy_pass_scheme://$var_proxy_pass;
}
}

(END)


举报

相关推荐

0 条评论