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

1,617次阅读
没有评论

之前有个测试环境配置 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、百度等平台型巨头持续布局
文章搜索
热门文章
清库存!DeepSeek突然补全R1技术报告,训练路径首次详细公开

清库存!DeepSeek突然补全R1技术报告,训练路径首次详细公开

清库存!DeepSeek突然补全R1技术报告,训练路径首次详细公开 Jay 2026-01-08 20:18:...
训具身模型遇到的很多问题,在数据采集时就已经注定了丨鹿明联席CTO丁琰分享

训具身模型遇到的很多问题,在数据采集时就已经注定了丨鹿明联席CTO丁琰分享

训具身模型遇到的很多问题,在数据采集时就已经注定了丨鹿明联席CTO丁琰分享 衡宇 2026-01-08 20:...
「北京版幻方」冷不丁开源SOTA代码大模型!一张3090就能跑,40B参数掀翻Opus-4.5和GPT-5.2

「北京版幻方」冷不丁开源SOTA代码大模型!一张3090就能跑,40B参数掀翻Opus-4.5和GPT-5.2

「北京版幻方」冷不丁开源SOTA代码大模型!一张3090就能跑,40B参数掀翻Opus-4.5和GPT-5.2...
AI金矿上打盹的小红书,刚刚醒了一「点点」

AI金矿上打盹的小红书,刚刚醒了一「点点」

AI金矿上打盹的小红书,刚刚醒了一「点点」 鱼羊 2025-12-26 17:04:08 来源:量子位 一个积...
最新评论
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.
热评文章
海信CES发布全新一代RGB-Mini LED,全球首创玲珑4芯真彩背光

海信CES发布全新一代RGB-Mini LED,全球首创玲珑4芯真彩背光

海信CES发布全新一代RGB-Mini LED,全球首创玲珑4芯真彩背光 量子位的朋友们 2026-01-06...
英特尔CES奇袭老黄大本营!英伟达显卡刚涨价,最强酷睿量产出货

英特尔CES奇袭老黄大本营!英伟达显卡刚涨价,最强酷睿量产出货

英特尔CES奇袭老黄大本营!英伟达显卡刚涨价,最强酷睿量产出货 十三 2026-01-06 13:54:54 ...
陈天桥代季峰打响2026大模型第一枪:30B参数跑出1T性能

陈天桥代季峰打响2026大模型第一枪:30B参数跑出1T性能

陈天桥代季峰打响2026大模型第一枪:30B参数跑出1T性能 鹭羽 2026-01-06 14:28:58 来...
OpenAI推理第一人离职,7年打造了o3/o1/GPT-4/Codex

OpenAI推理第一人离职,7年打造了o3/o1/GPT-4/Codex

OpenAI推理第一人离职,7年打造了o3/o1/GPT-4/Codex 衡宇 2026-01-06 13:0...