Nginx防盗链valid_referers白名单配置
时间:2026-11-15 07:13 作者:emer 分类: Nginx
前言
别的网站直接引用你站的图片,消耗你的带宽,这叫盗链。Nginx 用 valid_referers 校验请求来源 Referer,非白名单来源返回 403 或替换占位图。本文讲解白名单写法、拦截规则、空 Referer 处理和测试。
操作步骤
1. location 匹配图片资源
location ~* \.(jpg|jpeg|png|gif|webp)$ {
valid_referers none blocked server_names *.example.com;
if ($invalid_referer) {
return 403;
}
root /var/www/html;
}
2. 参数说明
- none:允许无 Referer 的直接访问。
- blocked:允许被代理过滤掉 Referer 的请求。
- server_names:允许本站域名。
3. 返回占位图代替 403
if ($invalid_referer) {
rewrite ^/.*\.jpg$ /anti-hotlink.jpg last;
}
4. 校验并重载
nginx -t && nginx -s reload
5. 模拟外站来源测试
curl -I -H "Referer: https://othersite.com/a.html" https://域名/pic.jpg
应返回 403。
常见坑
- 不写 none,用户直接打开图片(无 Referer)也被拦。
- 白名单漏写带 www 或子域名,本站图片显示异常。
- 手机 App、搜索引擎不带 Referer,被误拦。
- Referer 可伪造,防盗链只防普通网页引用。
- 只拦图片,CSS/字体资源同理可加规则。
- CDN 回源 Referer 被改写,需把 CDN 来源加入白名单。
- 规则放在静态资源 location,别写在根 location。
总结
valid_referers 列白名单,$invalid_referer 为真时 return 403 或重写到占位图。保留 none/blocked 兼容直接访问和 App。Referer 可伪造,属基础防护,配合 CDN 鉴权更稳。
遇到问题加QQ23979811 协助处理
标签: Nginx 防盗链 图片 valid_referers