
防盗链到底防什么?先搞清 Referer 机制
防盗链不是封 IP,本质是靠 HTTP 请求头里的 Referer 字段做来源判断。浏览器从 A 网站点开一张图,请求里会带上 Referer: https://a.com/xxx;如果 B 网站直接在 HTML 里写 <img src="https://your.com/a.jpg">,请求的 Referer 就是 https://b.com/ —— 宝塔就是拦这个。
所以它天然防不了:直接复制链接在新标签页打开、Postman 手动发请求、或者爬虫伪造 Referer。别指望它防采集,顶多让外站图片显示异常,增加一点搬运成本。
宝塔后台怎么填才不炸?关键三项配置逻辑
进【网站】→ 点域名 → 【防盗链】,三个核心项必须理解清楚再填:
-
URL后缀:只填你真要保护的静态资源后缀,用英文逗号分隔,比如
jpg,png,gif,webp,js,css。别加空格,别写.jpg(点不要),也别把html加进去——否则你自己首页都可能打不开。 -
许可域名:填你自己的主域名和所有合法调用方,比如
your.com,www.your.com,*.your.com,google.com,baidu.com。注意:*.your.com是支持通配符的,但your.com不自动包含子域,得单独写或用通配。 -
响应资源:建议填一个真实存在的小图路径,如
/403-blocked.png(提前上传到网站根目录)。比返回403更友好,也避免 CDN 缓存错误状态码。
“允许空 Referer”该不该开?看你的访问场景
这个开关一开,所有没带 Referer 的请求(比如用户直接在浏览器地址栏输图地址、微信内嵌浏览器、某些 PWA 场景)都能通过。关了,这些请求就全被挡,用户看到破图或 403。
绝大多数站点应该 开启,除非你明确知道:所有图片只会在自己网页内被 <img> 加载,且所有入口都带完整 Referer(比如纯 SPA + history 模式 + 全站 HTTPS)。
常见踩坑:
– 开启后搜索引擎图片搜索仍能预览(因为百度/谷歌的 Referer 是自身域名,已加在许可列表)
– 关闭后手机微信里点开文章,图全挂——这就是空 Referer 被拒了
Nginx 配置生效后怎么快速验证?别只刷自己首页
改完保存,立刻用两种方式测:
- 找一台没访问过你站的电脑或手机,用浏览器直接访问某张图 URL,比如
https://your.com/uploads/test.jpg—— 应该能正常显示(空 Referer 已放行) - 建个临时测试页,放在另一个域名下(比如本地
http://test.local),里面放<img src="https://your.com/uploads/test.jpg">,打开后图应失效(显示 403 或 fallback 图)
注意:Chrome 开发者工具的 Network 面板里看请求的 Referrer Policy 可能是 strict-origin-when-cross-origin,导致本地测试页发请求时没带 Referer,误判为“没生效”。真要验证,还是用跨域真实页面更准。
最常被忽略的一点:CDN 如果开了缓存,你改了宝塔防盗链,CDN 节点可能还在吐旧响应。记得去 CDN 后台刷新对应图片路径,或者临时关闭 CDN 测试。










