企业级防盗链需构建四层纵深防线:来源识别、连接压制、速率控制、路径隔离;须精准匹配业务入口、显式定义root/alias、配置真实ip识别、叠加ip/referer/secure_link校验、限制并发连接并统一响应与日志。

单靠 valid_referers 拦 Referer 只能挡住普通盗链,对爬虫、多线程拖库、CDN 回源穿透等真实攻击几乎无效。企业级防护必须构建四层纵深防线:来源识别、连接压制、速率控制、路径隔离,让恶意请求在不同阶段被拦截。
精准锁定资源路径,避免规则被绕过
别用 location ~ \.zip$ 这类后缀匹配——它无法区分用户点击下载和脚本暴力拉取。应显式圈定真实业务入口:
- 用前缀匹配(如
^~ /download/)或精确匹配(如= /api/v1/files),杜绝正则开销与继承干扰 - 每个 location 必须明确定义
root或alias,不依赖上级配置,防止路径解析绕过 - 若前端有 CDN 或负载均衡,需提前配置
set_real_ip_from和real_ip_header X-Forwarded-For,确保 IP 识别准确
三层来源校验,防伪造、防绕过
Referer 可伪造,IP 可代理,单一维度不可信。必须叠加使用:
-
IP 黑白名单:在关键 location 内直接写
deny 203.0.113.88;、allow 172.16.0.0/12;,优先阻断已知风险源 -
Referer 白名单:配合
valid_referers none blocked yoursite.com *.yoursite.com;,保留直接访问和隐私模式兼容性 -
secure_link 签名验证:对 PDF、Excel、高清图等高敏感资源强制启用,URL 带
?md5=xxx&expires=1720512000,过期即失效
从连接源头限并发,扼杀批量拖取
盗链工具常开启 20–50 个连接并发拉大文件,仅限速无用——连接一建就占内存和磁盘 I/O。必须在建立阶段掐断:
- 在
http{}块定义连接区:limit_conn_zone $binary_remote_addr zone=dl_conn:10m; - 在下载 location 中硬限制:
limit_conn dl_conn 2;(每个真实 IP 最多 2 个并发连接) - 若需更细粒度控制,可结合
map标记盗链行为,再联动limit_rate实现“前 5MB 不限速,之后限 40k”策略
统一响应与日志协同,兼顾体验与溯源
拒绝访问不等于返回 403 页面——那会暴露路径结构、增加服务压力:
- 所有非法请求统一返回一张 1KB 内的提示图:
rewrite ^/.*$ /images/hotlinking.png break;,并确保该图片 location 单独放行 - 自定义日志格式,记录
$remote_addr $http_referer $request_uri $status,便于识别盗链来源和行为模式 - 对高危请求(如高频 403、异常 UA)可额外触发告警,接入 SIEM 或运维看板











