独立站Nginx防盗链,防止图片、静态资源被盗刷流量

独立站只要图片、CSS、JS 等静态资源被其他网站直接引用,就会白白消耗源站带宽。
Nginx 防盗链通过校验访客来源(Referer)拦截非法请求,是性价比最高、也最容易落地的防护手段。
本文从零开始,演示独立站 Nginx 防盗链的完整配置步骤,并说明空 Referer、伪造 Referer 等情况怎么处理,配置完成后可以用命令快速验证是否生效。

先搞清楚防盗链能挡住什么

Nginx 的 valid_referers 指令可以检查 HTTP 请求头里的来源域名。
只有来源域名在允许列表里的请求,才能正常加载图片或静态文件,其他来源一律返回 403

这套方案适合以下场景:

  • 图片被其他网站直接用链接引用,导致源站流量上涨。
  • 静态资源被采集站批量调用,占用服务器带宽。
  • 不希望第三方站点将你的图片当作自己的资源展示。

这里顺手提醒一下,Referer 由浏览器主动发送,理论上可以被伪造,所以防盗链只防普通盗链,不防恶意攻击。
要彻底防刷,还需要配合 CDN、访问频率限制或对象存储的签名鉴权。

配置前需要准备什么

操作前确认两件事:

  • 你用的是 Linux 服务器,且 Nginx 已经安装并能正常访问网站。
  • 你能通过 SSH 登录服务器,或者在宝塔面板中能修改 Nginx 配置文件。

如果用的是宝塔面板,不需要直接编辑 /etc/nginx/nginx.conf,只需在对应站点的配置文件中添加规则,保存后重载 Nginx 即可。

Nginx 防盗链配置完整步骤

先看一个最常用的配置,把它放到 server 块内,或放到静态资源对应的 location 块中。

location ~ \.(gif|jpg|jpeg|png|webp|bmp|svg|css|js)$ {
    valid_referers none blocked \
        server_names \
        *.example.com example.com;
    if ($invalid_referer) {
        return 403;
    }
    expires 30d;
}

这里各行的作用:

  • valid_referers:指定允许的 Referer 来源。none 表示允许空 Referer;blocked 表示允许被防火墙或代理删除 Referer 的请求;*.example.com example.com 表示你自己的主域名和所有子域名。
  • $invalid_referer:Nginx 在请求来源不在列表内时自动赋予的变量,值为 1。
  • return 403:拦截非法盗链请求,不返回图片内容。
  • expires 30d:给合法请求设置浏览器缓存,减少源站压力。

修改配置文件后,先测试语法:

nginx -t

输出 syntax is ok 后,再重载 Nginx:

nginx -s reload

如果用的是宝塔面板,操作路径是:网站 → 找到站点 → 设置 → 配置文件,在 server 块内合适位置粘贴上述规则,保存后点击“重载配置”。

这三个坑最容易导致防盗链失效

只配置图片不配置 CSS/JS
很多盗链者会把整个页面的静态资源一起引用,有些教程只写图片后缀,导致 CSS、JS 仍被刷。
建议把常见静态资源后缀都加进去,或者直接写成 location ~ \.(gif|jpg|jpeg|png|webp|bmp|svg|css|js|woff|ttf|mp4|zip)$

空 Referer 被误杀
用户直接输入图片 URL、从收藏夹访问、或某些浏览器隐私模式下,自动请求可能不带 Referer。
前面配置里的 none blocked 就是允许这种情况,如果你把这两项去掉,会造成部分用户图片打不开。

使用 if 指令时位置不对if ($invalid_referer)location 块内是推荐用法,
但不要把它放到 httpserver 块外层,
否则可能触发 Nginx 的 if 重写限制,
导致配置不生效或 500 报错。

验证防盗链是否生效

配置完成后,用带伪造 Referer 的方式访问图片进行测试。
在服务器或本机执行:

curl -I -e "http://www.baidu.com" https://www.example.com/wp-content/uploads/2025/01/test.jpg

如果返回 HTTP/1.1 403 Forbidden,说明非法来源已经被拦截。
再用自己的域名测试:

curl -I -e "https://www.example.com" https://www.example.com/wp-content/uploads/2025/01/test.jpg

正常返回 HTTP/1.1 200 OK,说明合法来源可以访问。

如果使用 CDN,
CDN 回源请求可能不带 Referer 或来源是 CDN 节点域名,
这时需要把 CDN 域名加入 valid_referers
否则 CDN 缓存会大量失效,
甚至出现访问异常。

常见疑问:为什么加了防盗链流量还很高

这种情况多半不是因为图片直链,而是页面本身被频繁抓取,或静态资源体积太大、缓存时间太短。
防盗链只管来源,不管采集。
要降低流量消耗,可以同时做三件事:开启 Gzip 压缩、延长静态资源缓存时间、对单个 IP 的访问频率做限制。

另外,图片若被第三方站点以 no-referrer 方式加载(例如部分社交平台内嵌图片时主动隐藏来源),Nginx 会把它视为空 Referer。
如果这类平台对你很重要,可以考虑直接放行 none,否则对方会看到破图。
这是防盗链策略中的取舍问题,需要根据业务决定。

如果服务器内存和带宽都比较紧张,建议把防盗链配置和对象存储、CDN 结合使用。
CDN 回源时统一带上固定回源头,源站就只放行这个回源头来源,但 Nginx 对自定义头的校验需要用到 $http_origin$http_referer 的额外判断,普通场景下用本文的 Referer 方案已经足够。

按照上述步骤配置完成后,你的独立站图片和静态资源就具备了基础的防盗刷能力。
遇到异常时,优先检查 valid_referers 里是否漏写了 CDN 域名,以及配置文件是否真的重载成功。

分享到:
上一篇
WordPress遭受暴力破解wp‑admin
下一篇
WordPress定时任务WP‑Cron踩坑
1
系统公告

机房迁移升级通知

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