一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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),需提前约定并固化以下两点:

  1. 租户域名模式:统一使用二级子域名(如 shop1.example.comblog2.example.com),或主域名+路径前缀(如 example.com/shop1/);推荐前者,便于 Nginx 的 server_name$host 变量直接提取租户标识。
  2. 静态资源路径收敛:所有租户的图片、视频等资源统一放在 /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;
}

}

  1. map 指令根据 $host 提取子域名(如 shop1.example.com → shop1.example.com),并生成对应的白名单字符串;
  2. valid_referers 直接引用变量,自动适配各租户;
  3. 正则捕获确保只匹配合法子域名格式(防通配符滥用),default "" 表示未匹配域名默认无白名单,强化安全兜底。

租户级例外与合作方授权机制

生产环境中常需为特定租户开放第三方合作域名(如 CMS 平台、CDN 回源、管理后台),应避免硬编码到全局 map 中,而是采用“租户配置优先”策略:

  1. 在对应 server 块内,用 set 覆盖 $valid_referer_pattern 变量值:

    set $valid_referer_pattern "shop1.example.com api.partner-cdn.com *.cms-platform.io";

  2. 或使用独立 location 块专用于高权限租户:

    location ~ ^/t/shop1/static/ { valid_referers none blocked shop1.example.com api.partner-cdn.com; ... }

  3. 所有合作域名必须走书面审批流程,禁止泛域名(如 *.com)或裸 IP 授权。

安全基线强制项(不可省略)

该模板上线前必须校验以下基线要求,否则视为配置不生效:

  1. Referer 检查必须启用:确认 ngx_http_referer_module 已编译(nginx -V 2>&1 | grep -o with-http-referer-module);
  2. 禁止无 referer 放行敏感资源:对 .pdf.zip 等文件类型,none 必须显式排除(即不写 none),仅允许明确域名;
  3. 错误响应不泄露信息:403 页面禁用默认 Nginx 错误页,返回最小化 HTML 或空响应头,避免暴露服务器版本或路径结构;
  4. 日志留痕:在 access_log 中添加 $invalid_referer 字段,便于审计异常 referer 请求。

热门栏目