«

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. 参数说明

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。

常见坑

  1. 不写 none,用户直接打开图片(无 Referer)也被拦。
  2. 白名单漏写带 www 或子域名,本站图片显示异常。
  3. 手机 App、搜索引擎不带 Referer,被误拦。
  4. Referer 可伪造,防盗链只防普通网页引用。
  5. 只拦图片,CSS/字体资源同理可加规则。
  6. CDN 回源 Referer 被改写,需把 CDN 来源加入白名单。
  7. 规则放在静态资源 location,别写在根 location。

总结

valid_referers 列白名单,$invalid_referer 为真时 return 403 或重写到占位图。保留 none/blocked 兼容直接访问和 App。Referer 可伪造,属基础防护,配合 CDN 鉴权更稳。

遇到问题加QQ23979811 协助处理

标签: Nginx 防盗链 图片 valid_referers