Nginx 处理多租户架构:如何根据域名动态选择不同的后端集群

雨强同学_9139

雨强同学_9139

2026-05-25

840人浏览

原创

Nginx通过正则提取子域名租户标识、map映射后端、透传至网关动态发现三种方式实现多租户动态路由,支持泛域名SSL与自动证书管理。

nginx 处理多租户架构:如何根据域名动态选择不同的后端集群

Nginx 实现多租户架构下的动态后端路由,核心在于从请求域名中提取租户标识,并据此决定转发目标。这不是靠手动为每个租户写一个 server 块,而是用正则捕获 + 变量映射 + 条件代理的方式,让配置具备可扩展性。

基于子域名提取租户名并路由

Nginx 支持在 server_name 中使用正则表达式命名捕获组,把子域名部分直接提取为变量:

server {
    listen 80;
    server_name ~^(?<tenant>[^.]+)\.example\.com$;

    location / {
        proxy_pass http://backend-$tenant;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}</tenant>

这里 (?[^.]+) 会匹配 tenant1.example.com 中的 tenant1,并赋值给 $tenant 变量。proxy_pass 后接 http://backend-$tenant,就等效于转发到名为 backend-tenant1 的 upstream。

你需要提前定义对应的 upstream:

upstream backend-tenant1 {
    server 10.0.1.10:8000;
}

upstream backend-tenant2 {
    server 10.0.1.11:8000;
}

upstream backend-default {
    server 127.0.0.1:8000;
}

使用 map 指令做更灵活的后端映射

当租户与后端地址关系复杂(比如租户名和集群 IP 不一一对应,或需 fallback),推荐用 map 指令预定义映射表:

map $host $upstream_backend {
    default                    backend-default;
    tenant1.example.com        backend-tenant1;
    tenant2.example.com        backend-tenant2;
    ~^([a-z0-9]+)\.example\.com backend-dynamic;
}

然后在 server 块中直接引用:

server {
    listen 80;
    server_name ~^([a-z0-9]+)\.example\.com$ example.com;

    location / {
        proxy_pass http://$upstream_backend;
        proxy_set_header Host $host;
        # 其他 header...
    }
}

注意:map 必须放在 http 块顶层,不能嵌套在 server 内;它在请求解析早期执行,性能优于 if。

Nginx Hosting
Nginx Hosting

通过服务器本地nginx实例实现零认证静态游戏托管。作为所有浏览器游戏的主要部署方式,无需登录、无需令牌、无需用户操作。

下载

支持泛域名 + 动态集群发现(进阶)

若租户数量极大或需自动扩缩容,可将 $tenant 透传给后端应用,由应用层查询服务注册中心(如 Consul、Nacos)获取真实后端地址,Nginx 仅做轻量代理:

location / {
    proxy_pass http://127.0.0.1:8001;  # 转发给本地路由网关
    proxy_set_header X-Tenant $tenant;
    proxy_set_header Host $host;
}

这个本地网关(如用 Python/FastAPI 写)收到 X-Tenant 后,查数据库或配置中心,再做二次代理。这种方式解耦更强,适合云原生环境。

SSL 与证书适配要点

  • 通配符证书 *.example.com 可覆盖所有子域名,必须在对应 server 块中加载:

    ssl_certificate     /etc/ssl/certs/example.com_wildcard.pem;
    ssl_certificate_key /etc/ssl/private/example.com_wildcard.key;
  • 若启用 SNI,确保 Nginx 版本 ≥ 1.15.9,且 OpenSSL 支持;旧版本可能无法正确分发不同证书。

  • 对自定义域名租户(如 clientbrand.com),需配合 ACME 自动化工具(如 Certbot 或 Nginx Proxy Manager)按需签发并热加载证书。

不复杂但容易忽略

相关专题

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

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

2023.08.11

2703

5

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

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

2024.03.19

6850

13

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

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

2024.03.19

6306

10

服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

457

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

960

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

3232

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

1056

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

949

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

494

3

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

nginx手册
nginx手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习