Nginx upstream DNS 解析缓存问题
Posted catoop
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
以上是关于Nginx upstream DNS 解析缓存问题的主要内容,如果未能解决你的问题,请参考以下文章