Nginx动态域名解析理解

举报
Studying-swz 发表于 2022/10/24 19:56:58 2022/10/24
【摘要】 1.背景:proxy_pass 中如果配置的是域名地址,Nginx 只有在 start / restart / reload 时,才会连接一次域名服务器解析域名,缓存解析的结果,后续则不会根据解析结果的 TTL 进行自动更新”,如果遇到了域名地址配置有多个 IP ,且还在动态变化,那就会出现 Nginx 把请求转发到一个过期的 IP 地址的情况,产生连接超时的报错信息。upstream t...

1.背景:

proxy_pass 中如果配置的是域名地址,Nginx 只有在 start / restart / reload 时,才会连接一次域名服务器解析域名,缓存解析的结果,后续则不会根据解析结果的 TTL 进行自动更新”,如果遇到了域名地址配置有多个 IP ,且还在动态变化,那就会出现 Nginx 把请求转发到一个过期的 IP 地址的情况,产生连接超时的报错信息。

upstream test-interface { 
    server abc.test.cn; 
} 
server { 
    listen 12345; 
    server_name localhost; 
    location / { 
        proxy_pass http://test-interface; 
        proxy_http_version 1.1; 
        proxy_set_header Connection ""; 
    } 
}

2.核心思想:

NGINX自身充当dns的客户端进行动态dns解析。

3.解决方案:

动态域名解析是通过resolver指令和变量来实现的。指令resolve可以在http范围内全局设定,也可以在某一个server甚至某一个location里面单独设定。

如下配置,当访问服务器的根目录时,会把请求转移到test变量定义的服务器中。而且,这个test变量定义的服务器abc.test.cn会通过resolver 定义的dns 服务器进行动态解析。
在此配置中,通过resolver得到的解析结果有效期是10秒。有效期过后,再次访问根目录时就会对域名进行重新解析。

需要注意的是,如果proxy_pass后面是一个域名而不是一个变量,那么对域名的解析也是发生在启动解析期间,无法完成动态域名解析的功能。

注:不是说 Nginx 每过 10 秒会自己重新调一次 DNS 解析,而是有请求转发时才检验一次有效期是否过期。

http {
server {
                listen 12345;
                resolver 8.8.8.8 valid=10s;
                set   $test   abc.test.cn;
                location / {
                    proxy_pass http://$test;
                }
        }
}

指令resolver的配置语法是:

resolver 114.114.114.114 8.8.8.8 valid=10s ipv6=off;

参数说明:

resolver 可以在http全局设定,也可在server里面设定
resolver 后面指定DNS服务器,可以指定多个,空格隔开
valid设置DNS缓存失效时间,自己根据情况判断,建议600以上
resolver_timeout 指定解析域名时,DNS服务器的超时时间,建议3秒左右  

DNS域名服务器:

DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 
(IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 
(IP address)的表,以解析消息的域名。 
详情见计算机网络文章:[https://blog.csdn.net/qq_37534947/article/details/120399336?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166649505816782391855445%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166649505816782391855445&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-120399336-null-null.article_score_rank_blog&utm_term=%E8%AE%A1%E7%AE%97%E6%9C%BA&spm=1018.2226.3001.4450](https://blog.csdn.net/qq_37534947/article/details/120399336?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166649505816782391855445%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166649505816782391855445&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-120399336-null-null.article_score_rank_blog&utm_term=%E8%AE%A1%E7%AE%97%E6%9C%BA&spm=1018.2226.3001.4450)

参考链接:

https://www.jianshu.com/p/5782b26be9cf

https://zhuanlan.zhihu.com/p/391382420

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。