Nginx防盗链原理

Nginx防盗链原理

引言

网站图片、视频、静态资源经常被其他站点直接引用,消耗服务器流量与带宽。Nginx防盗链通过校验请求来源Referer,阻止第三方网站直接嵌入你的资源链接,降低服务器流量损耗。

原理说明

浏览器访问页面加载图片时,请求头会携带Referer,代表来源页面地址。Nginx读取该请求头,判断域名是否属于本站,非信任域名直接返回403拒绝访问。

局限:Referer可被客户端伪造,防盗链属于基础防护,不是100%安全,重要资源建议搭配token鉴权。

Nginx配置示例

location ~* \.(jpg|png|gif|mp4)$ {
    valid_referers none blocked *.0454.wang;
    if ($invalid_referer) {
        return 403;
    }
}

配置解释:

  • valid_referers配置允许的来源;
  • none允许直接浏览器地址栏访问资源;
  • 匹配不到白名单,$invalid_referer生效,返回403。

进阶优化

  • 重要资源可使用url签名,生成带时效token的资源地址;
  • CDN环境,需要同步在CDN配置防盗链;
  • 部分爬虫、APP请求不带Referer,按需调整规则。

总结

Nginx Referer防盗链是低成本的静态资源保护手段,适合图片博客、素材站点。适合作为第一层防护,高安全场景需要结合URL签名二次校验。


emer 发布于  2026-10-18 07:12 

Nginx防盗链配置,防止图片被别人盗用

前言

网站的图片被别人盗链了,他的网站直接用你的图片地址,流量全从你服务器走,白白消耗带宽。Nginx 可以配置防盗链,防止这种情况。

什么是盗链

就是别人在自己网站里直接引用你服务器上的图片。用户看他的网站,实际图片是从你服务器加载的。

防盗链原理

Nginx 检查请求头里的 Referer 字段,看是从哪个页面过来的。如果不是自己网站的 Referer,就拒绝或者返回一张提示图。

基础配置

location ~* \.(jpg|png|gif|jpeg)$ {
    valid_referers none blocked www.example.com example.com;
    if ($invalid_referer) {
        return 403;
    }
}

解释:

  • valid_referers:允许哪些来源访问
  • none:允许直接输入地址访问
  • blocked:允许伪装的 Referer
  • www.example.com:自己的域名

配置示例

server {
    listen       80;
    server_name  www.example.com;

    root  /var/www/html;
    index index.html;

    # 防盗链
    location ~* \.(jpg|png|gif|jpeg|webp)$ {
        valid_referers none blocked www.example.com example.com *.example.com;
        if ($invalid_referer) {
            return 403;
        }
    }
}

替换成提示图

不想直接 403,可以返回一张"禁止盗链"的提示图:

location ~* \.(jpg|png|gif|jpeg)$ {
    valid_referers none blocked www.example.com example.com;
    if ($invalid_referer) {
        rewrite ^/.*\.(jpg|png|gif)$ /no-hotlink.png last;
    }
}

这样别人盗链就显示一张提示图。

常见坑

坑1:自己网站图片也加载不出来

配了防盗链,自己网站的图片也打不开了。

原因: valid_referers 里没写全自己的域名。

解决: 把 http 和 https 的域名都写上:

valid_referers none blocked www.example.com example.com;

坑2:搜索引擎图片也被挡了

百度图片搜不到你的图片了。

原因: 防盗链把搜索引擎也挡了。

解决: 加上搜索引擎的 Referer:

valid_referers none blocked www.example.com example.com *.baidu.com *.google.com;

坑3:CDN 后面防盗链不生效

用了 CDN,防盗链配置不生效。

原因: 请求经过 CDN,Referer 是 CDN 的。

解决: CDN 那边配置防盗链,或者把 CDN 的 Referer 加到白名单。

坑4:微信里打开图片不显示

在微信里打开自己的文章,图片显示不出来。

原因: 微信的 Referer 被挡了。

解决: 加上微信的 Referer:

valid_referers none blocked www.example.com example.com *.weixin.qq.com;

总结

防盗链就三行配置:

valid_referers none blocked www.example.com example.com;
if ($invalid_referer) {
    return 403;
}

记住: 配完防盗链,先测试一下自己网站图片能不能正常打开。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-7 07:47 
'); })();