Nginx防盗链规则保护产品原图防止盗用

产品原图被别的网站直接引用,最直接的后果是服务器流量被白白消耗,图片版权也说不清。Nginx 防盗链规则是通过检查访问请求中的 Referer 字段来实现的,只允许自家域名和约定的空 Referer 访问图片,其余来源一律返回 403。
本文面向零基础用户,从原理讲到配置,再给出验证方式和常见坑点,你只需跟着操作就能完成基础防护。

防盗链规则到底做了什么

当浏览器访问一张图片时,HTTP 请求头里通常会带一个 Referer 字段,表示“我是从哪个页面跳过来的”。
如果这个页面是别人的网站,那这张图片就是在被跨站引用。
Nginx 的 valid_referers 指令可以定义一份允许的来源白名单,不在名单里的请求就会触发你设定的 deny 动作。

对于产品原图这类资源,防盗链的意义不只是省流量,还能避免图片被嵌入到别人的页面里展示,减少被批量采集和冒用的风险。

配置前要确认哪些事

开始之前,先做好两件事:

  • 确认你的网站是用 Nginx 跑的,而不是 Apache。可以在服务器执行 nginx -v 查看版本;如果你用的是宝塔面板,在“软件商店”里能看到 Nginx 的运行状态。
  • 确认你要保护哪些目录或文件类型。常见做法是保护 uploadsimagesstatic 这类存放图片的目录,或者专门针对 .jpg.png.gif.webp 等图片后缀做限制。

另外,CDN 加速和防盗链可能冲突,如果网站接了 CDN,需要先确认 CDN 回源时是否带 Referer,否则可能会误伤正常访问。

手把手配置 Nginx 防盗链规则

Nginx 防盗链规则通常写在 server 块或 location 块里,推荐针对具体图片目录配置,避免影响整站。

通过宝塔面板配置(适合新手)

  1. 登录宝塔面板,进入“网站”,找到目标站点,点击“配置文件”。
  2. server { ... } 内部,找到你想保护的目录对应的 location 块,或者直接在 server 块里新增一段。
  3. 参考下面的配置,按需修改域名和目录:
location ~* /\.(jpg|jpeg|png|gif|webp)$ {
    valid_referers none blocked server_names *.yourdomain.com yourdomain.com;
    if ($invalid_referer) {
        return 403;
    }
    expires 30d;
    access_log off;
}
  • none 表示允许空 Referer 访问,比如直接在浏览器地址栏输入图片链接,或者某些 App 内打开时没有 Referer。
  • blocked 表示允许被防火墙或代理隐藏了 Referer 的请求。
  • server_names 代表下面列出的域名都是合法来源。
  • *.yourdomain.com 覆盖所有子域名,yourdomain.com 覆盖主域名,请替换成你自己的域名。
  • return 403 是拒绝访问,你也可以改成 rewrite 一张防盗链提示图。

保存后,在 Nginx 设置里点击“重载配置”。
建议先用 nginx -t 检查语法,再执行 systemctl reload nginxnginx -s reload

手动修改 Nginx 配置文件(适合命令行用户)

如果你不用面板,直接用 SSH 登录服务器:

# 编辑站点配置文件,路径根据实际情况调整
vim /etc/nginx/conf.d/yourdomain.conf

server 块里加入类似下面的配置,这种写法只保护指定目录里的图片,对站点其他部分无影响:

location /uploads/ {
    alias /path/to/uploads/;
    valid_referers none blocked *.yourdomain.com yourdomain.com;
    if ($invalid_referer) {
        return 403;
    }
}

保存后执行:

nginx -t
systemctl reload nginx

看到 syntax is ok 就说明配置语法没问题。

配置完怎么验证是否生效

不要只看配置就收工,一定要实际测试。
下面三种验证方式,任选一种即可:

  1. 正常页面访问:用浏览器打开你网站的某个产品详情页,图片应正常显示。打开浏览器开发者工具(F12),在 Network 里查看图片请求状态,应为 200。
  2. 伪造来源访问:在命令行用 curl 模拟一个陌生网站的 Referer:
curl -I -e "http://evil.com/page.html" "https://yourdomain.com/uploads/product.jpg"

如果返回 403 Forbidden,说明规则已经拦截了盗链请求。

  1. 无 Referer 访问:直接访问图片 URL,不带 Referer:
curl -I "https://yourdomain.com/uploads/product.jpg"

如果返回 200,说明 none 设置生效;
如果返回 403,说明你在配置里没加 none,可以按需调整。

高频出错点和避坑说明

1. 二级域名被误杀

如果图片被二级域名正常引用,但显示 403,检查 valid_referers 是否写上了对应的 *.yourdomain.com
子域名和主域名最好都写,否则很容易漏。

2. 空 Referer 被拦截

很多用户直接在微信、QQ 或浏览器地址栏打开图片链接,此时 Referer 为空。
若你的 valid_referers 里没有 none,这些请求会被拦掉。
建议保留 none
但如果你的需求是防止别人在自家服务器上下载原图,也可以去掉 none,根据业务取舍。

3. 使用 if 指令的注意事项

Nginx 官方文档不建议在 location 中随意使用 if,但 if ($invalid_referer) 是常见用法,实践中非常普遍。
更稳妥的写法是使用 mapreferer_hash,但对大多数中小企业站点,if 足够用。

4. 防盗链不是绝对安全

Referer 可以伪造,防盗链规则只能防“普通盗用”,防不住刻意学你 Referer 的脚本。
如果产品原图极其敏感,建议同时使用水印、权限控制或带签名的 URL(比如 Nginx secure_link 模块)。

5. 用了 CDN 要小心回源请求

CDN 节点回源时,Referer 可能是 CDN 的域名,也可能为空。
如果配置后 CDN 图片全部 403,建议在 CDN 控制台设置回源 Host,并在 Nginx 的 valid_referers 里加入 CDN 域名,或直接关闭部分路径的防盗链。

常见问题解答

问:配置了防盗链后,自己网站上的图片也打不开怎么办?

先检查 valid_referers 填的域名是否和你网站当前访问域名完全一致,包括协议、端口。
如果用了 HTTPS,但配置里是 HTTP,也会拦截。
再确认是否写了 none,没有的话直接在浏览器输入图片链接访问也会失败。

问:只想保护产品原图,不限制其他图片怎么弄?

把图片按目录区分,比如产品原图放在 /uploads/product/,然后给这个目录单独写 location,其他目录不写规则即可。
不要对全站图片做统一限制,否则容易影响样式或轮播图。

问:Nginx 防盗链和 CDN 防盗链选哪个?

如果只靠 Nginx 防盗链,CDN 缓存的是原始图片,别人拿 CDN 地址也能直接访问。
建议使用 CDN 自带的 Referer 黑白名单或鉴权功能,在边缘节点就拦截盗链,这样节省的回源流量更多。
两者可以结合使用。

问:配置后 error.log 里大量 403,会影响网站收录吗?

403 响应本身是正常的拦截结果,不会被误判为网站故障。
但如果你把首页、JS、CSS 这些也加入了图片防盗链规则,且没放行相关来源,可能导致页面资源加载失败,从而影响抓取。
所以仅针对图片路径配置,不建议全局乱写。

完成以上配置后,你的 Nginx 防盗链规则已经能覆盖大部分盗用场景。
如果后续出现图片批量采集或流量异常,建议再配合日志分析、限速模块以及对象存储的权限策略加固。
Nginx 防盗链规则保护产品原图防止盗用,本质上是给图片资源加一道简单的“门禁”,把非白名单来源挡在门外,既不改变原图结构,也不影响正常用户访问。
如果配置过程中遇到问题,优先回看自己的 valid_referers 域名和路径是否匹配,再检查是否有 CDN 或反代层干扰,多数异常都能从这里找到原因。

分享到:
上一篇
一键批量修复宝塔站点异常文件权限
下一篇
批量清理网站垃圾图片释放服务器磁盘空间的完整实操指南
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意