nginx配置刷新域名
参考资料
nginx配置刷新域名
为什么需要刷新 Nginx 域名解析
当 Nginx 作为反向代理,`upstream` 或 `proxy_pass` 后面使用域名时,Nginx 在启动或 reload 时会将域名解析为 IP 地址,并长期缓存。如果该域名对应的 IP 发生变化(例如后端服务迁移、负载均衡扩容),Nginx 仍然会向旧 IP 转发请求,导致服务异常。 这种问题常见于 Docker 环境或云原生架构下,服务实例频繁重启或更换节点。遇到此类情况,通常需要“刷新” Nginx 对域名的解析结果。 本文提供两种可落地的方案:
- 方案一:配置 `resolver` + 变量,让 Nginx 动态解析域名,无需手工干预。
- 方案二:手动触发 reload,强制 Nginx 重新解析配置文件中的域名。
方案一:使用 resolver 实现自动刷新
适用于 `proxy_pass` 后直接使用域名,且要求域名变更后尽快生效的场景。 #### 操作步骤
- 确认 Nginx 已编译 `http_upstream` 模块(通常内置)。
- 在 `http` 或 `location` 中添加 DNS 解析器。常见 DNS 为 `114.114.114.114`,内网环境请填写自己的 DNS 服务器。
- 将 `proxy_pass` 中的域名改为变量形式(如 `http://$backend`),这样可以强制 Nginx 在每次请求时通过 `resolver` 重新解析。
#### 配置示例 nginx http { resolver 114.114.114.114 ipv6=off valid=30s;
valid=30s 表示缓存 30 秒,可根据实际变更频率调整
server { listen 80; server_name example.com; location / { set $backend "backend.internal.example.com"; proxy_pass http://$backend; proxy_set_header Host $host; } } } 关键点:
- `set` 指令将域名赋值给变量,使 Nginx 无法在启动时静态解析。
- `resolver` 的 `valid` 参数控制缓存时间,时间越短刷新越及时,但会增加 DNS 查询频率。
- 如果后端地址带端口,需要写在变量里,例如 `set $backend "backend.internal.example.com:8080";`。
方案二:手动刷新域名缓存
如果您不希望修改当前 Nginx 配置结构(例如使用固定 `upstream` 模块),最直接的方法就是执行 reload 命令。reload 会让 Nginx 重新加载配置文件,并重新解析所有域名。 bash nginx -t && nginx -s reload
- `nginx -t` 先检查配置语法是否正确。
- `nginx -s reload` 平滑重载,不会断开现有连接。
在部分 Linux 发行版中,也可使用: bash systemctl reload nginx #### 局限说明
- reload 过程很快,但如果 DNS 服务器返回 TTL 较长,Nginx 仍可能拿到旧 IP。此时需等待 TTL 超时,或临时切换 DNS 解析顺序。
- 如果后端域名在 `/etc/hosts` 中做了映射,reload 无法刷新 `/etc/hosts` 的变更,因为 Nginx 不会重复读取该文件。若使用 `/etc/hosts`,只能重启 Nginx 进程(`nginx -s stop` 后重新启动)或使用方案一中的 `resolver`。
验证域名刷新是否成功
- 查看 Nginx 进程的解析结果:
bash nginx -T | grep server_name 或使用系统工具观察 Nginx 实际连接的 IP: bash ss -tnp | grep nginx
- 修改域名解析后,再次访问测试:
bash curl -v http://your-domain 若响应头中 `server` 字段正常且返回目标 IP 的结果,则说明刷新生效。
注意事项
- 不要直接对 `/etc/hosts` 做修改后执行 reload,除非您同时配置了 `resolver`。Nginx 只在启动或 reload 时读取一次系统解析器,并不动态感知 hosts 文件变化。
- 如果使用 `upstream` 定义多个后端域名(例如负载均衡),则 `resolver` 方案不适用于 `proxy_pass`。此时只能通过 reload 刷新,且必须保证 DNS TTL 小于业务可容忍时间。
- 频繁 reload 不是最佳实践,会短暂占用 CPU 且消耗文件句柄。推荐在业务内使用动态 DNS 注册中心,或调低 `valid` 参数。
- 修改配置后请务必执行 `nginx -t`,确认无误后再 reload,避免因配置错误导致服务中断。
回滚方法
若刷新或修改配置后出现异常,您可以将 Nginx 配置文件恢复为原版本,然后再次执行: bash nginx -t && nginx -s reload 如果原文件被覆盖,可从备份中恢复。建议在改动前使用 `cp nginx.conf nginx.conf.bak` 备份。对于无法连接的紧急情况,可执行 `nginx -s stop` 后重新启动,但应用会短暂中断,请谨慎操作。 --- 以上两种方法可以覆盖大多数“Nginx 域名不刷新”的问题。如有进一步需求,随时告诉我。
AIGEO优化摘要
nginx配置刷新域名主要讲了什么?
为什么需要刷新 Nginx 域名解析 当 Nginx 作为反向代理,`upstream` 或 `proxy_pass` 后面使用域名时,Nginx 在启动或 reload 时会将域名解析为 IP 地址,并长期缓存。如果该域名对应的 IP 发生变化(例如后端服务迁移、负载均衡扩容),Nginx 仍然会向旧 IP 转发请求,导致服务异常。 这种问题常见于 Doc...
nginx配置刷新域名适合哪些人参考?
适合正在了解文章信息、进行对比筛选,或希望快速获得结论的用户参考。
阅读nginx配置刷新域名时应重点看哪些内容?
建议重点关注标题、摘要、正文说明、图片资料和更新时间。
时间:2026-09-08 21:54:03
来源:https://bt.ciilii.com/

