独立站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 块内是推荐用法,
但不要把它放到 http 或 server 块外层,
否则可能触发 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
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意