防盗链只校验Referer域名,若白名单未完整包含example.com、www.example.com、servicewechat.com、localhost等所有可能来源(不带协议,逗号分隔无空格),或未开启允许空Referer、未修复文件权限与MIME类型,即导致403。

为什么加了 www.example.com 还是打不开图片
因为防盗链只认 Referer 域名,而浏览器发起请求时的 Referer 可能是 example.com、www.example.com、https://example.com(带协议)、甚至 localhost 或 127.0.0.1(本地调试),只要没完全匹配白名单,就拦截。
常见错误现象:后台富文本上传后预览空白、前端 AJAX 加载图片 403、微信小程序里图片全挂。
- 白名单必须填域名主体,不带
http://或https:// - 主站和子域名都要列全,例如:
example.com,www.example.com,admin.example.com,servicewechat.com - 开发环境别漏掉
localhost和127.0.0.1,否则本地调试图片直接不加载 - 多个域名用英文逗号分隔,中间不能有空格,否则宝塔会把带空格的部分当无效域名丢弃
servicewechat.com 必须手动加,不能靠“自动识别”
微信小程序 WebView 内请求图片时,Referer 固定为 https://servicewechat.com,不是你的业务域名。宝塔防盗链不会自动识别这个特殊来源,必须显式加入白名单,否则所有小程序端图片返回 403。
- 只需填
servicewechat.com,不要写成https://servicewechat.com或servicewechat.com/ - 加完保存后,小程序需清除本地缓存再测试,否则仍可能走旧缓存
- 如果用了微信公众号内嵌页,Referer 是
mp.weixin.qq.com,也得一并加进白名单
空 Referer 请求被拒?检查“允许空HTTP_REFERER请求”是否开启
富文本编辑器(如 UEditor、KindEditor)在 iframe 中预览图片时,请求不带 Referer 头,会被防盗链模块直接拒绝,表现为点击上传后图片预览区一片空白。
- 该选项默认关闭,必须手动勾选才能放行无 Referer 的请求
- 勾选后务必点击【保存】,并重启 Nginx 或 Apache(仅重载配置不够,部分规则需服务重启才生效)
- 生产环境慎开此选项——它会放行所有盗链来源的空 Referer 请求,建议仅在确认是 iframe 场景导致问题时启用
许可域名填对了,但还是 403?可能是 MIME 类型或文件权限在捣鬼
防盗链只是第一道关卡。即使 Referer 合法,Nginx 仍可能因文件权限不足(Permission denied)或 MIME 类型未注册(浏览器无法识别格式)导致图片不显示,此时错误日志里看不到防盗链相关记录,容易误判。
- 查错误日志:
进宝塔 → 网站 → 对应站点 → 日志 → 错误日志,搜索Permission denied或open() "/path/to/img.jpg" failed - 确认图片目录权限为
755(保证 Nginx 能进入),文件权限为644(保证可读不可执行) - 检查 MIME 配置:
网站 → 设置 → 配置文件,在types { }块中补上image/webp webp;、image/avif avif;等新格式,改完要点【重载配置】


















