Nginx 防盗链:三行规则保住你的图片带宽

来源:互联网 时间:2026-08-26

月底一看流量报表,消耗翻倍,查访问日志发现一堆陌生域名在直接引用你站上的图。别人家的页面加载你付钱买的带宽,这买卖不能做。防盗链Nginx原生支持,就是referer模块。

原理一句话:浏览器请求图片时会带上Referer头标明来路,不是你允许的来路就直接拒掉或换图。核心就三行。

location ~* \.(jpg|jpeg|png|gif|webp|mp4)$ {
valid_referers none blocked server_names
*.yoursite.com yoursites-cdn.com;

if ($invalid_referer) {
return 403; # 也可以 return 302 到一张提示图
}
}

none表示空Referer放行——用户直接在地址栏敲图片URL、部分邮件客户端都不带Referer,一刀切拦掉会误伤真人。blocked是Referer被代理或防火墙抹掉的情况,也建议放行。真正的目标只有那些站外页面。

微信、QQ、微博这些平台的抓图请求Referer各不相同,如果你希望图片能在社交分享卡片里显示,把对应域名加进valid_referers列表。改完nginx -t测试、nginx -s reload生效,然后用一个在线防盗链检测工具或在自己另一个域名挂个img标签试试,403就是生效了。

顺带说一句: Referer是可以伪造的,防得住君子防不住定向爬虫。真要保护付费内容,走签名URL(secure_link模块)或者直接挪到对象存储的私有桶。对绝大多数个人站长,referer这套已经能省下可观的带宽钱。

数据来源:nginx.org官方文档 ngx_http_referer_module 模块说明

相关文章

A5创业网 版权所有