如何通过 resolver 指令在 http 块解决后端动态域名的解析问题

云浩酱_5047

云浩酱_5047

2026-05-13

814人浏览

原创

Nginx 中需在 http 块顶层配置 resolver 并配合变量使用 proxy_pass,才能实现后端域名 IP 的自动更新;resolver 必须带 valid 参数(如 valid=30s),proxy_pass 必须引用变量(如 $backend)而非静态域名,且需手动设置 Host 请求头。

如何通过 resolver 指令在 http 块解决后端动态域名的解析问题

要在 Nginx 中让后端域名随 IP 变更自动更新,光写 proxy_pass http://api.example.com; 是没用的——它只在启动时解析一次。真正起效的关键,是把 resolver 放在 http 块里,并配合变量和缓存控制。

resolver 必须放在 http 块顶层

它不能塞进 upstream、location 或 events 里,否则要么报错,要么不生效。正确写法是:

  • http { resolver 223.5.5.5 114.114.114.114 valid=30s; ... }
  • 多个 DNS 地址用空格分隔,提高容错性
  • valid=30s 是核心:强制每 30 秒检查一次 DNS 是否变化,不加这个参数就等于没配
  • 避免使用 127.0.0.11(Docker 内置 DNS),容器环境推荐用宿主机 DNS 或 CoreDNS ClusterIP

proxy_pass 必须走变量路径

静态写法不会触发 resolver,必须让 Nginx “看到”这是一个需要实时查 DNS 的地址:

ChatSPSS
ChatSPSS

ChatSPSS是一款AI数据处理工具,AI 数据分析助手,零门槛在线使用。

下载
  • ✅ 正确:set $backend "api.example.com:8000"; proxy_pass http://$backend;
  • ❌ 错误:proxy_pass http://api.example.com;(启动时查一次,之后永不更新)
  • 协议前缀 http:// 不能省,写成 $backend 或 // 都无效
  • Host 请求头不会自动带出,需手动补:proxy_set_header Host api.example.com;

验证是否真正在刷新

别信 nginx -t,它只校验语法。真实效果得看运行时行为:

  • 改 DNS 记录(比如把域名指向一个新 IP),等超过 valid 时间(如 30 秒)
  • 查 error.log,出现 resolving api.example.com 或 resolved ... to 10.20.30.40 才算成功
  • 如果频繁报 no resolver defined,先确认 resolver 是否在 http 块、DNS 地址能否 nslookup 通、UDP 53 端口是否被拦截
  • 加 resolver_timeout 3s; 防止单次查询卡住请求

进阶:用 upstream + resolve(Nginx ≥ 1.19.0)

需要负载均衡或健康检查时,可换更规范的方式:

  • 保持 http 块已有 resolver
  • upstream backend { server api.example.com:8080 resolve valid=20s; }
  • 注意:server 行必须写域名,不能写 IP;低于 1.19.0 的版本会直接忽略 resolve
  • 仍需确保 proxy_pass http://backend; 指向该 upstream

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2883

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

7170

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6706

10

nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.27

423

5

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

4067

6

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

2023.08.04

6925

6

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

601

5

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.07.09

1516

5

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

2024.08.07

3978

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Docker Desktop设置与维护手册
Docker Desktop设置与维护手册

共0课时 | 0人学习

LLVM官方文档
LLVM官方文档

共0课时 | 0人学习