如何通过proxy_pass配置变量实现后端动态域名解析

冬浩大大_2352

冬浩大大_2352

2026-05-31

1053人浏览

原创

Nginx可通过resolver配合变量实现后端域名动态解析,需在http块配置resolver、proxy_pass必须为“协议+变量+端口”格式且不带路径,变量应通过map等安全方式构造并确保合法可解析。

如何通过proxy_pass配置变量实现后端动态域名解析

可以通过 Nginx 的 proxy_pass 指令配合变量实现后端域名的动态解析,但需注意:Nginx 默认在启动/重载时静态解析 upstream 域名,若想运行时按请求动态解析(比如根据 header、参数或路径拼出不同后端域名),必须启用 resolver 并使用变量形式的 proxy_pass,且不能写死在 upstream 块中。

必须配置 resolver 指令

Nginx 只有在显式声明 resolver 后,才支持对变量中的域名做运行时 DNS 解析。否则即使写了 $backend_host,也会报错 “invalid URL prefix” 或直接拒绝加载配置。

  • resolver 需指定可用的 DNS 服务器,例如:resolver 8.8.8.8 114.114.114.114 valid=30s;
  • valid 参数控制 DNS 缓存时间,避免频繁查询;太短会增加 DNS 压力,太长不利于后端 IP 变更的及时感知
  • resolver 必须放在 server 或 location 块外(通常置于 http 块顶层),不可嵌套在 location 内

proxy_pass 必须使用变量且不含 URI 路径

当 proxy_pass 值包含变量时,其格式必须是「协议 + 变量域名 + 可选端口」,不能带固定路径(如 http://$host/api 是非法的),否则 Nginx 无法正确拼接请求 URI。

Bailian Usage Proxy
Bailian Usage Proxy

阿里百炼大模型平台多人共享账号用量统计代理服务。解决公司共用账号时无法区分个人用量的问题。适用场景:1)部署用量统计代理;2)统计多人Token用量和调用次数;3)管理大模型API调用配额。

下载
  • ✅ 正确写法:proxy_pass http://$backend_host:$backend_port;
  • ❌ 错误写法:proxy_pass http://$backend_host:8080/v1;(带路径会导致 404 或转发异常)
  • 若需重写路径,应配合 rewrite 或 proxy_redirect,或用 proxy_pass 不带路径 + proxy_set_header Host $backend_host;

变量值需确保可解析且合法

用于 proxy_pass 的变量(如 $backend_host)必须在运行时能稳定生成合法域名(不含空格、特殊字符、协议头),且该域名真实可被 resolver 解析。

  • 可通过 set、map、if(慎用)或内置变量(如 $arg_backend、$http_x_backend)构造
  • 建议用 map 提前定义安全映射,避免注入风险,例如只允许预设的几个后端别名转为真实域名
  • 若变量为空或解析失败,Nginx 默认返回 502;可加 proxy_next_upstream error timeout invalid_header http_502; 做基础兜底

完整最小可运行示例

以下配置实现:根据请求头 X-Backend-Host 动态代理到对应域名,带 DNS 实时解析和基本校验:

http {
    resolver 8.8.8.8 valid=10s;

    map $http_x_backend_host $backend_upstream {
        default "default.example.com";
        "api-v1" "svc-v1.internal.cluster";
        "api-v2" "svc-v2.internal.cluster";
    }

    server {
        listen 80;
        location / {
            set $backend_host $backend_upstream;
            set $backend_port 80;

            proxy_pass http://$backend_host:$backend_port;
            proxy_set_header Host $backend_host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

相关专题

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

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

2023.08.11

2703

5

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

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

2024.03.19

6830

13

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

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

2024.03.19

6286

10

nginx 重启
nginx 重启

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

2023.07.27

423

5

nginx 配置详解
nginx 配置详解

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

2023.08.04

3847

6

nginx配置详解
nginx配置详解

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

2023.08.04

6625

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

1496

5

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

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

2024.08.07

3978

3

热门下载

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

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习