最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 如何在 Nginx 中配置多租户多域名环境下的通用防盗链安全拦截基线模板
时间:2026-09-04 19:38:49 编辑:袖梨 来源:一聚教程网
多租户Nginx防盗链需按域名分组定义referer白名单,通过map提取$host动态生成$valid_referer_pattern,统一location规则匹配静态资源路径,支持租户级例外与安全基线校验。
在多租户、多域名环境下,Nginx 防盗链不能简单套用单域名白名单逻辑——每个租户(子域名或独立域名)的合法来源必须隔离且可动态扩展,同时要避免配置冗余、误拦截或规则冲突。核心思路是:按域名分组定义 referer 白名单,统一复用 location 规则,通过变量动态匹配当前 host,兼顾安全性与可维护性。
明确租户标识与资源路径规范
多租户场景下,资源通常按租户隔离(如 /t/{tenant-id}/ 或子域名 tenant1.example.com),需提前约定并固化以下两点:
-
租户域名模式:统一使用二级子域名(如
shop1.example.com、blog2.example.com),或主域名+路径前缀(如example.com/shop1/);推荐前者,便于 Nginx 的server_name和$host变量直接提取租户标识。 -
静态资源路径收敛:所有租户的图片、视频等资源统一放在
/static/或/media/下(如https://shop1.example.com/static/logo.png),不混杂在根路径或任意深度目录中,便于集中 location 拦截。
通用防盗链 location 块(支持多域名自动适配)
将防盗链逻辑封装在可复用的 location 中,不依赖具体 server 块重复书写。关键在于用 $host 动态提取当前请求域名,并构造合法 referer 模式:
示例配置(放入 http 块或 conf.d 公共 include 文件):
map $host $valid_referer_pattern {default"";~^(?<sub>[a-z0-9-]+).example.com$"$sub.example.com *.example.com";~^example.com$ "example.com *.example.com";# 可追加其他主域,如 ~^.*.myapp.org$"$1.myapp.org *.myapp.org";}location ~* .(jpg|jpeg|png|gif|webp|mp4|mov|avi|pdf|zip|rar|woff2|ttf)$ { valid_referers none blocked $valid_referer_pattern; if ($invalid_referer) { return 403;
或返回统一提示页:return 302 /blocked.html;}
}
-
map指令根据$host提取子域名(如shop1.example.com → shop1.example.com),并生成对应的白名单字符串; -
valid_referers直接引用变量,自动适配各租户; - 正则捕获确保只匹配合法子域名格式(防通配符滥用),
default ""表示未匹配域名默认无白名单,强化安全兜底。
租户级例外与合作方授权机制
生产环境中常需为特定租户开放第三方合作域名(如 CMS 平台、CDN 回源、管理后台),应避免硬编码到全局 map 中,而是采用“租户配置优先”策略:
- 在对应
server块内,用set覆盖$valid_referer_pattern变量值:set $valid_referer_pattern "shop1.example.com api.partner-cdn.com *.cms-platform.io"; - 或使用独立 location 块专用于高权限租户:
location ~ ^/t/shop1/static/ { valid_referers none blocked shop1.example.com api.partner-cdn.com; ... } - 所有合作域名必须走书面审批流程,禁止泛域名(如
*.com)或裸 IP 授权。
安全基线强制项(不可省略)
该模板上线前必须校验以下基线要求,否则视为配置不生效:
-
Referer 检查必须启用:确认
ngx_http_referer_module已编译(nginx -V 2>&1 | grep -o with-http-referer-module); -
禁止无 referer 放行敏感资源:对
.pdf、.zip等文件类型,none必须显式排除(即不写none),仅允许明确域名; - 错误响应不泄露信息:403 页面禁用默认 Nginx 错误页,返回最小化 HTML 或空响应头,避免暴露服务器版本或路径结构;
-
日志留痕:在 access_log 中添加
$invalid_referer字段,便于审计异常 referer 请求。
相关文章
- DataWorks Data Agent 实战课(八):搭建数据质量巡检服务 09-11
- lgtm:实践指南 09-11
- DoRA:实践指南 09-11
- Codex 进阶实践:用可验收规格定义编码任务 09-11
- RoadArchitect:实践指南 09-11
- WorkflowEngine.NET:实践指南 09-11