宝塔面板Nginx防盗链,保护图片资源
当你的网站图片被其他站点直接引用时,流量和带宽会被白白消耗。
本文面向零基础用户,介绍如何在宝塔面板中通过修改Nginx配置实现防盗链,保护图片资源不被盗用。
操作前请确保已安装宝塔面板和Nginx,并备份网站配置。
配置前的准备工作
登录宝塔面板,进入“网站”列表,找到需要防盗链的站点,点击“设置”。
在“配置文件”中可以看到当前Nginx配置。
建议先复制一份配置内容到本地,或使用宝塔的“备份”功能,避免误操作导致网站无法访问。
防盗链的核心是检查HTTP请求头中的Referer字段。Referer表示请求来源页面的地址。
如果来源不是自己的域名,就拒绝提供图片。
你需要提前整理允许访问的域名列表,例如:
- 主域名:
www.example.com - 不带www的域名:
example.com - 如果使用了CDN,还需加入CDN回源域名
修改Nginx配置文件
在宝塔面板中,点击站点设置里的“配置文件”,找到server块内部,在location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$这类图片规则之前或之后添加防盗链规则。
如果不存在该规则,可以手动添加。
以下是一个可用的配置示例,请将yourdomain.com替换为你的实际域名:
location ~* \.(gif|jpg|jpeg|png|bmp|webp|swf)$ {
valid_referers none blocked server_names *.yourdomain.com yourdomain.com;
if ($invalid_referer) {
return 403;
}
expires 30d;
access_log off;
}
关键点说明:
valid_referers定义允许的来源。none表示允许没有Referer的请求(例如用户直接输入图片URL),blocked表示允许Referer被防火墙或代理隐藏的请求。server_names表示允许当前server块中server_name指令定义的域名。*.yourdomain.com和yourdomain.com显式允许你的域名及其子域名。- 如果
$invalid_referer为真,则返回403禁止访问。你也可以返回一个替代图片,例如rewrite ^ /anti-hotlink.png break;。
修改完成后,点击“保存”,宝塔会自动检查配置并重载Nginx。
如果报错,请根据提示检查语法。
避坑指南与常见问题
1. 图片显示403错误
如果自己的网站图片无法显示,通常是白名单遗漏了域名。
检查valid_referers是否包含了不带www的域名和子域名。
如果使用了CDN,确保将CDN的回源域名加入白名单。
2. 直接访问图片URL被禁止
如果希望允许用户直接在浏览器打开图片,保留none关键字。
如果不需要,可以移除none,但这样会导致部分直接访问失效。
3. 配置后网站样式错乱
防盗链规则可能匹配了CSS或JS文件。
检查正则表达式是否仅针对图片后缀,避免误伤其他静态资源。
4. 宝塔面板中修改无效
确认修改的是正确的站点配置文件,并且保存后Nginx已重载。
可以在宝塔“软件商店”中重启Nginx,或通过SSH执行nginx -t测试配置,然后nginx -s reload。
5. 需要允许搜索引擎收录图片
如果希望百度、Google等搜索引擎能显示图片,可以将常见搜索引擎域名加入白名单,例如*.baidu.com、*.google.com,但需注意这也会允许这些搜索引擎的图片代理。
验证防盗链是否生效
配置完成后,可以通过以下方法验证:
- 在其他网站或本地HTML文件中引用你的图片URL,打开页面查看图片是否显示。如果显示403或替换图,说明防盗链生效。
- 使用
curl命令模拟请求:curl -I -e "http://otherdomain.com" http://yourdomain.com/image.jpg,观察返回状态码是否为403。 - 直接访问图片URL,应该能正常显示(如果允许
none)。
如果验证时发现异常,请返回检查配置,并确认Nginx错误日志(宝塔面板“日志”中可查看)是否有相关记录。
用户常见疑问
问:防盗链配置会影响网站速度吗?
答:Nginx处理Referer检查非常快,对性能影响极小。
问:除了图片,还能保护其他文件吗?
答:可以,修改正则表达式匹配其他后缀即可,例如视频、PDF等。
问:如果网站使用了HTTPS,Referer会正常传递吗?
答:HTTPS页面引用HTTPS资源时,Referer会正常传递;
HTTPS引用HTTP资源时,浏览器可能不发送Referer。
问:宝塔面板有没有一键防盗链功能?
答:宝塔面板本身没有专门的防盗链开关,但可以通过配置文件实现,本文提供的方法适用于大多数场景。
按照以上步骤操作后,你的图片资源将得到有效保护。
如果遇到问题,优先检查白名单和Nginx错误日志。