Nginx防盗链配置,防止图片被别人盗用
时间:2026-10-7 07:47 作者:emer 分类: 无
前言
网站的图片被别人盗链了,他的网站直接用你的图片地址,流量全从你服务器走,白白消耗带宽。Nginx 可以配置防盗链,防止这种情况。
什么是盗链
就是别人在自己网站里直接引用你服务器上的图片。用户看他的网站,实际图片是从你服务器加载的。
防盗链原理
Nginx 检查请求头里的 Referer 字段,看是从哪个页面过来的。如果不是自己网站的 Referer,就拒绝或者返回一张提示图。
基础配置
location ~* \.(jpg|png|gif|jpeg)$ {
valid_referers none blocked www.example.com example.com;
if ($invalid_referer) {
return 403;
}
}
解释:
valid_referers:允许哪些来源访问none:允许直接输入地址访问blocked:允许伪装的 Refererwww.example.com:自己的域名
配置示例
server {
listen 80;
server_name www.example.com;
root /var/www/html;
index index.html;
# 防盗链
location ~* \.(jpg|png|gif|jpeg|webp)$ {
valid_referers none blocked www.example.com example.com *.example.com;
if ($invalid_referer) {
return 403;
}
}
}
替换成提示图
不想直接 403,可以返回一张"禁止盗链"的提示图:
location ~* \.(jpg|png|gif|jpeg)$ {
valid_referers none blocked www.example.com example.com;
if ($invalid_referer) {
rewrite ^/.*\.(jpg|png|gif)$ /no-hotlink.png last;
}
}
这样别人盗链就显示一张提示图。
常见坑
坑1:自己网站图片也加载不出来
配了防盗链,自己网站的图片也打不开了。
原因: valid_referers 里没写全自己的域名。
解决: 把 http 和 https 的域名都写上:
valid_referers none blocked www.example.com example.com;
坑2:搜索引擎图片也被挡了
百度图片搜不到你的图片了。
原因: 防盗链把搜索引擎也挡了。
解决: 加上搜索引擎的 Referer:
valid_referers none blocked www.example.com example.com *.baidu.com *.google.com;
坑3:CDN 后面防盗链不生效
用了 CDN,防盗链配置不生效。
原因: 请求经过 CDN,Referer 是 CDN 的。
解决: CDN 那边配置防盗链,或者把 CDN 的 Referer 加到白名单。
坑4:微信里打开图片不显示
在微信里打开自己的文章,图片显示不出来。
原因: 微信的 Referer 被挡了。
解决: 加上微信的 Referer:
valid_referers none blocked www.example.com example.com *.weixin.qq.com;
总结
防盗链就三行配置:
valid_referers none blocked www.example.com example.com;
if ($invalid_referer) {
return 403;
}
记住: 配完防盗链,先测试一下自己网站图片能不能正常打开。
遇到问题加QQ23979811 协助处理