Nginx反向代理域名但域名IP变化后还解析的是变化前的IP

1,600次阅读
没有评论

之前有个测试环境配置 proxy_pass 时直接指定域名是可以用的,比如

location/ {    proxy_pass http://dev.abc.com:10068;}

遇到一个问题是:
反向代理的地址是通过花生壳动态dns实现的。
dev.abc.com通过cname解析到花生壳之类的动态dns给分配的域名上,如果路由器因为断电或者掉线之类的原因重新拨号后ip发生变化,此处nginx就无法反向代理了,必须重启一次nginx才行。

报错如下图:

今天遇到一个问题就是通过 set 设置变量,然后 proxy_pass 调用变量实现反向代理(目的是减少配置复杂度),比如:

set$skyneturl"http://dev.abc.com:10077"; # 注意set好像不支持变量名中带下划线或其它特殊字符location /applyrecord/aladinnApplyrecord {     proxy_pass $skyneturl;}

重启nginx后发现报502错误,也就是连不上后端服务器。
看nginx日志发现错误提示:

2019/04/11 10:34:04 [error] 17241#0: *4334742 no resolver defined to resolve dev.abc.com ...

说没有定义 resolver命令 来解析域名,查了一下发现需要配置resolver参数。

官网文档:http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver

Syntax: resolver address ... [valid=time] [ipv6=on|off];Default:    —Context:    http, server, locationConfigures name servers used to resolve names of upstream servers into addresses, for example:

意思是需要配置dns地址用来再次解析upstream中的域名(用域名替代ip地址,后来经过测试upstream中配置域名只会在nginx启动时解析一次,然后就一直用这个ip,使用resolver实现每隔多久时时再次解析)
添加resolver配置参数:

#server里面设定示例server {    listen 8080;    server_name localhost;    resolver 202.102.134.68114.114.114.114valid=5 ipv6=off;    resolver_timeout 3s;set $skyneturl "dev.abc.com"; location/applyrecord/aladinnApplyrecord {    	proxy_pass http://$skyneturl:10077;    }}

resolver:后接指定的DNS服务器,多个用空格隔开。resolver可以在http里面全局设定,也可以在server里面设定。
valid:DNS缓存时间,也可以不指定,缓存时间会默认根据域名的TTL时间。

ipv6:on或off,指定该域名解析为ipv6地址。
resolver_timeout:指定解析域名时,DNS服务器的超时时间,也可以不指定。
set :设置变量,在使用resolver之后,必须使用set设置变量来代替域名,否则会报错。另外,set不能写到 location里面否则不会生效。注意:set变量在server中可以设置成功,http中语法不允许。

#http里面设定示例http{    ......    resolver 202.102.134.68114.114.114.114valid=5 ipv6=off;    resolver_timeout 3s;    server {        listen 8080;        server_name localhost;set $skyneturl "dev.abc.com"; location/applyrecord/aladinnApplyrecord {    	    proxy_pass http://$skyneturl:10077;        }    }    ......}

重启nginx后访问成功。

过程回顾:
无意间查资料发现 proxy_pass 后面跟域名的话并不是每次请求都会解析出这个域名的ip(这也验证了必须重启nginx才能解决),所以就会导致路由ip变化时造成服务无法访问。
解决这个问题的话,就可以用 set 设置一个变量,通过 resolver 实现每次访问都重新解析出ip地址。
这里还有一个问题,发现通过set和resolver设置域名解析时,重启路由器测试访问时,还是无法解析出新地址,通过tcpdump抓包没有发现有请求dns解析。
后来注意到还有个 valid 参数需要配置,这个参数用来控制缓存时间的,默认时间取决于dns记录的ttl值,比如我用windows搭建的dns解析默认是3600秒,也就是一小时。
通过修改valid参数,这里设置为5秒后,再次抓包发现每隔5秒后访问虚拟主机的时候就会产生一次dns解析。

这样才解决动态dns解析访问问题。

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)

文心AIGC

2024 年 8 月
 1234
567891011
12131415161718
19202122232425
262728293031  
文心AIGC
文心AIGC
人工智能ChatGPT,AIGC指利用人工智能技术来生成内容,其中包括文字、语音、代码、图像、视频、机器人动作等等。被认为是继PGC、UGC之后的新型内容创作方式。AIGC作为元宇宙的新方向,近几年迭代速度呈现指数级爆发,谷歌、Meta、百度等平台型巨头持续布局
文章搜索
热门文章
潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026

潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026

潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026 Jay 2025-12-22 09...
“昆山杯”第二十七届清华大学创业大赛决赛举行

“昆山杯”第二十七届清华大学创业大赛决赛举行

“昆山杯”第二十七届清华大学创业大赛决赛举行 一水 2025-12-22 17:04:24 来源:量子位 本届...
MiniMax海螺视频团队首次开源:Tokenizer也具备明确的Scaling Law

MiniMax海螺视频团队首次开源:Tokenizer也具备明确的Scaling Law

MiniMax海螺视频团队首次开源:Tokenizer也具备明确的Scaling Law 一水 2025-12...
天下苦SaaS已久,企业级AI得靠「结果」说话

天下苦SaaS已久,企业级AI得靠「结果」说话

天下苦SaaS已久,企业级AI得靠「结果」说话 Jay 2025-12-22 13:46:04 来源:量子位 ...
最新评论
ufabet ufabet มีเกมให้เลือกเล่นมากมาย: เกมเดิมพันหลากหลาย ครบทุกค่ายดัง
tornado crypto mixer tornado crypto mixer Discover the power of privacy with TornadoCash! Learn how this decentralized mixer ensures your transactions remain confidential.
ดูบอลสด ดูบอลสด Very well presented. Every quote was awesome and thanks for sharing the content. Keep sharing and keep motivating others.
ดูบอลสด ดูบอลสด Pretty! This has been a really wonderful post. Many thanks for providing these details.
ดูบอลสด ดูบอลสด Pretty! This has been a really wonderful post. Many thanks for providing these details.
ดูบอลสด ดูบอลสด Hi there to all, for the reason that I am genuinely keen of reading this website’s post to be updated on a regular basis. It carries pleasant stuff.
Obrazy Sztuka Nowoczesna Obrazy Sztuka Nowoczesna Thank you for this wonderful contribution to the topic. Your ability to explain complex ideas simply is admirable.
ufabet ufabet Hi there to all, for the reason that I am genuinely keen of reading this website’s post to be updated on a regular basis. It carries pleasant stuff.
ufabet ufabet You’re so awesome! I don’t believe I have read a single thing like that before. So great to find someone with some original thoughts on this topic. Really.. thank you for starting this up. This website is something that is needed on the internet, someone with a little originality!
ufabet ufabet Very well presented. Every quote was awesome and thanks for sharing the content. Keep sharing and keep motivating others.
热评文章
库克提拔复旦校友掌舵苹果基础模型!庞若鸣走后涨薪止血,谷歌旧部占据半壁江山

库克提拔复旦校友掌舵苹果基础模型!庞若鸣走后涨薪止血,谷歌旧部占据半壁江山

库克提拔复旦校友掌舵苹果基础模型!庞若鸣走后涨薪止血,谷歌旧部占据半壁江山 衡宇 2025-12-21 10:...
清华孙茂松:对工业界而言,大厂可以Scaling,其他玩家重在垂直应用 | MEET2026

清华孙茂松:对工业界而言,大厂可以Scaling,其他玩家重在垂直应用 | MEET2026

清华孙茂松:对工业界而言,大厂可以Scaling,其他玩家重在垂直应用 | MEET2026 Jay 2025...
奥迪+华为=油车智能天花板?

奥迪+华为=油车智能天花板?

Failed to fetch content Read More 
LeCun离职前的吐槽太猛了

LeCun离职前的吐槽太猛了

LeCun离职前的吐槽太猛了 一水 2025-12-21 19:13:08 来源:量子位 “LLM到不了AGI...
自变量王潜:具身智能是物理世界的独立基础模型|MEET2026

自变量王潜:具身智能是物理世界的独立基础模型|MEET2026

自变量王潜:具身智能是物理世界的独立基础模型|MEET2026 一水 2025-12-21 19:11:12 ...