nginx可通过按租户划分server块、location精确匹配、referer校验及rewrite/return实现多租户隔离:每个租户独占server块绑定专属域名,静态资源目录独立,防盗链仅限本域及空referer,重定向策略(http→https、www跳转等)按租户定制,所有规则须置于对应server块内防越界。

在多租户环境下,每个租户拥有独立域名,需确保资源不被其他站点盗用,同时支持灵活的重定向策略(如 www 跳转、HTTP 强制 HTTPS、路径规范化等)。Nginx 本身不内置“租户”概念,但可通过 server 块隔离 + location 精确匹配 + referer 校验 + rewrite/return 控制 实现逻辑上的租户级策略分离。
按租户划分 server 块,实现域名级策略隔离
每个租户对应一个独立的 server 块,绑定其专属域名(含 www 和非 www 变体),避免配置交叉污染。这是多租户策略落地的基础。
- 使用
server_name明确声明该租户的所有合法域名,例如:server_name tenant-a.com www.tenant-a.com; - 为每个租户单独设置
root或alias,指向其专属静态资源目录,如/var/www/tenant-a/static/ - 避免在全局
http块中写通用防盗链或重定向规则,防止误匹配
针对静态资源目录启用 referer 防盗链
仅对图片、CSS、JS、视频等易被盗链的资源类型做校验,且只允许本租户域名及空 referer(适配直接访问或部分移动端)。
- 在租户对应的
location块中匹配资源后缀,例如:location ~* \.(jpg|jpeg|png|gif|webp|css|js|mp4|pdf)$ { ... } - 用
valid_referers定义白名单:valid_referers none blocked tenant-a.com www.tenant-a.com;
其中none允许直接输入 URL 访问,blocked拦截伪造 referer - 校验失败时返回 403 或跳转到提示页:
if ($invalid_referer) { return 403; }或rewrite ^/.*$ /forbidden.png last;
按租户定制重定向逻辑
重定向应基于租户业务需求差异化配置,不强求统一规则。常见场景包括协议升级、子域名归一、路径补斜杠等。
- HTTP → HTTPS 强制跳转(推荐用
return 301,性能优于 rewrite):if ($scheme = http) { return 301 https://$host$request_uri; } - 顶级域名自动跳转 www(或反之),需另建一个 server 块专用于跳转:
server { listen 80; server_name tenant-a.com; return 301 https://www.tenant-a.com$request_uri; } - 目录结尾自动补 "/"(防止 301 循环):
location ^~ /blog { if (-d $request_filename) { rewrite ^(.*[^/])$ $1/ permanent; } }
租户间策略互不影响的关键细节
多租户共存时,容易因配置顺序或通配符导致策略“越界”。需注意以下几点:
- server 块的
server_name必须精确匹配,避免使用泛域名(如*.example.com)除非明确需要通配,否则易引发跨租户干扰 - 所有重定向和防盗链规则都应放在对应租户的
server块内,不要写在http或上游upstream中 - 测试时用
curl -H "Referer: https://evil-site.com" https://tenant-a.com/logo.png验证防盗链是否生效;用不同域名发起请求验证重定向是否精准触发 - 配置变更后务必执行
nginx -t检查语法,并用nginx -s reload平滑加载,避免影响其他租户服务











