Nginx 防盗链 Referer 配置实战
时间:2026-11-15 07:17 作者:emer 分类: 无
Nginx 防盗链 Referer 配置实战
一、什么是盗链
别的网站直接把你服务器上的图片、视频地址写进自己页面,访客访问他的网站时,流量和带宽却从你的服务器流出。图片、视频、安装包这类大资源最容易被白嫖。防盗链就是校验请求来源 Referer,只允许自己的域名引用这些资源。
二、Referer 是什么
浏览器从一个页面跳到资源请求时,会在请求头带上 Referer,记录来源页面地址。Nginx 用 valid_referers 校验它是否在白名单内,不在就拒绝。注意 Referer 可被伪造或缺失,它是低成本防护,不是强安全方案。
三、基础配置
location ~* \.(jpg|jpeg|png|gif|mp4|zip|rar)$ {
valid_referers none blocked server_names
*.0454.wang 0454.wang;
if ($invalid_referer) {
return 403;
}
}
none:允许 Referer 为空(直接输入网址、收藏夹访问);blocked:允许 Referer 被代理去掉的情况;server_names:允许本站域名;$invalid_referer:不匹配白名单时为 1,返回 403。
四、返回占位图而非 403
直接 403 图片裂着不友好,可以重定向到一张提示图:
if ($invalid_referer) {
rewrite ^/images/(.*)$ /static/no-hotlink.png redirect;
}
五、区分静态与动态
防盗链一般只加在资源目录,别整站限制,否则搜索引擎、直接访问、接口调用会被误伤:
location /images/ {
valid_referers none blocked *.0454.wang;
if ($invalid_referer) { return 403; }
}
六、配合 deny 与 CDN
- 对恶意站点 IP 可在 limit_req / deny 层进一步封锁;
- 用 CDN 时,真实 Referer 可能被改写,要把 CDN 回源或自身域名加入白名单;
- 视频站可叠加签名 URL(带过期 token),比纯 Referer 更可靠。
七、验证配置
# 模拟合法来源
curl -I -H "Referer: https://www.0454.wang/a.html" https://0454.wang/img/a.jpg
# 模拟盗链来源,应返回 403
curl -I -H "Referer: https://evil.com/b.html" https://0454.wang/img/a.jpg
改完执行 nginx -t && nginx -s reload 重载生效。
八、常见误区
- 把
none去掉,导致直接访问图片全部 403; - 整站 location 都加防盗链,误伤页面和接口;
- 只配 Referer 就当绝对安全,忽略了它可伪造;
- HTTPS 转 HTTP 场景浏览器不带 Referer,白名单需兼容;
- 改完不 nginx -t 直接 reload,语法错误导致服务中断。
九、总结
Nginx 防盗链靠 valid_referers 校验来源白名单,对图片视频等大资源限制外部引用,配合占位图、目录限定和 CDN 白名单使用。它能挡住大部分普通盗链,但要明白 Referer 可伪造,高价值资源应再叠加签名 URL 或鉴权,改配置前务必先 nginx -t 校验。