站群系统图片防盗链设置:别让带宽被白嫖,实操避坑指南
做站群的朋友多半有过这种经历:服务器明明没多少访问量,带宽账单却一路往上蹿。查日志才发现,图片被别的站点直接引用走了,自己掏钱给人做图床。站群系统图片防盗链设置,说到底就是给图片加一道门槛——允许正常访客和搜索引擎看,拦住那些不请自来的外链引用。今天这篇不聊虚的,把配置思路和踩过的坑一起摊开讲。

为什么站群系统对图片盗链格外敏感
单站点被盗链,损失还算可控。站群不一样,几十上百个站点共用一个图片资源池,一个热门图片目录被批量抓取引用,流量会成倍放大。更麻烦的是站群内部经常有跨站调用图片的需求,防盗链规则写得太死,自家站点之间先打起来了。
还有个细节容易被忽略:部分站群的图片是自动采集后本地化的,路径规则比较规律,比如 /uploads/2024/06/xxx.jpg 这种结构,外站写个正则就能批量扒。所以防盗链不能只防君子,得按实际攻击面来设计。
Referer 校验:基础但别写歪
Referer 头仍然是目前成本最低、见效最快的判断依据。核心逻辑很简单:请求来源域名在允许列表里就放行,不在就返回 403 或者一张占位图。
Nginx 下的典型写法是这样:
valid_referers none blocked server_names *.yourdomain.com——把自家主域名和子域名都加进去,站群多站点时这条尤其关键。- 对没有 Referer 的请求(
none)要不要放行,得看业务。直接访问图片地址的用户体验要保留,但爬虫伪装也常走这条路,我个人倾向先放行 none,再配合 UA 和频率做二次过滤。 - 命中非法来源后,返回 403 比返回空白图更省事,但有些主题模板对 403 处理不友好,会出现破图占位,这种情况换成一张小体积的提示图更稳妥。
这里有个真实踩坑:早期图省事写了 *.yourdomain.com,结果别人注册了个 evilyourdomain.com,匹配规则一宽松就漏过去了。域名通配符最好显式带上点号边界,别贪方便。
站群多站点场景下的白名单管理
站群系统图片防盗链设置最容易翻车的地方,就是白名单维护。站点一多,手工改配置必然出错。比较靠谱的做法是把允许域名抽成独立配置文件,用 include 引入,增删站点只动这一个文件,主配置不用碰。
如果站群系统本身支持在后台配置资源域名,那更好,直接和系统里的站点绑定关系联动。我见过有团队写了个小脚本,站点新增时自动把域名写进防盗链白名单,省掉人工同步这一环,出错率明显下降。这套自动化值不值得做,取决于你们站群规模,十个站以内手动也无妨。
CDN 层与源站的防盗链要分两层看
很多站群图片走 CDN,这时候防盗链就有两个位置:CDN 边缘节点和源站。边缘配置生效快、不占源站资源,但规则表达能力通常弱一些;源站 Nginx 规则灵活,可一旦 CDN 缓存命中,源站规则根本轮不到执行。
实操建议是两层都配,但职责分开。CDN 侧管住 Referer 白名单和 URL 鉴权,源站侧再兜一层,防止有人绕过 CDN 直接打源站 IP。顺手把源站 IP 隐藏好,或者只允许 CDN 回源段访问,这步比防盗链本身还重要。
另外提一句,CDN 的 Referer 黑白名单各家实现细节不同,有的对空 Referer 默认放行,有的默认拦截,上线前一定拿真实请求测一遍,别只看后台开关是绿的。
别把搜索引擎爬虫一起挡在门外
这是防盗链设置里投诉率最高的失误。百度、Google 的图片抓取请求,Referer 可能为空,也可能来自搜索引擎自己的域名。规则一严,图片收录直接掉,站群本来靠图片搜索带的那点流量就没了。
稳妥的处理方式:把主流搜索引擎的域名加进白名单,同时保留空 Referer 放行。如果担心被滥用,可以用 UA 做辅助判断,但别把 UA 当唯一依据——UA 太容易伪造了。这块我没法给出一个放之四海皆准的规则,不同站群的抓取频率和风险承受度不一样,建议先小范围灰度,观察一周日志再定。
上线后的验证清单
配置写完不等于完事。下面几项建议逐条过一遍:
- 用 curl 带不同 Referer 请求图片,确认 200 和 403 的返回符合预期,别只信浏览器里看着正常。
- 模拟搜索引擎抓取(改 UA、清空 Referer),看图片是否仍可访问。
- 检查站群内部各子站之间的图片调用有没有被误伤,这个最容易在深夜被用户反馈炸出来。
- 观察日志里 403 的比例,异常偏高说明白名单漏了域名。
最后说句实在话,防盗链只是降低盗链成本,挡不住铁了心要扒图的人——截图、代理转发都能绕。它的价值在于把随手引用的那批人挡掉,这部分往往占了盗链流量的大头。站群系统图片防盗链设置做到这个程度,带宽账单基本就能回到正常水位了。