小皮面板防盗链设置后静态资源无法访问怎么办

域名注册
域名注册 初级会员超兽战士 👑年卡会员
发布于 2026-10-08 21:57 ·1 浏览 ·0 回复

按这篇做完,你能让被防盗链误伤的 CSS、JS、图片重新正常加载,同时保留防盗链效果。

第一步:先确认 403 确实是防盗链造成的

这一步要拿到明确证据,避免把问题错怪到防盗链头上。打开浏览器无痕窗口,按 F12 打开开发者工具,切到 Network 面板,刷新页面,找到报错的静态资源(状态码一般是 403,也可能是 302 跳到某张占位图),点开它看 Request Headers 里的 Referer 值,以及 Response Headers 里有没有 server: nginx。

再用命令行做对比测试,两条命令只有 Referer 不一样:

curl -I https://www.example.com/static/style.css
curl -I -H "Referer: https://www.other.com/" https://www.example.com/static/style.css

如果第一条 200、第二条 403,说明防盗链生效且规则正常,问题出在白名单没覆盖自己的域名;如果两条都 403,说明白名单几乎没配对,或者空 Referer 被拦了。

注意:不带 Referer 的请求(地址栏直接打开、APP 内嵌 WebView、小程序、iOS Safari 隐私模式)非常常见,它们全都算「空 Referer」,必须显式放行。

第二步:在面板里找到防盗链配置入口

这一步要看到当前的白名单到底写了什么。登录小皮面板,左侧菜单点「网站」,在站点列表里找到目标站点,点右侧的「管理」→「设置」,在弹出的窗口里切到「防盗链」标签页(部分版本叫「防盗链设置」)。

切到同一窗口的「配置文件」标签页,搜索 valid_referers,你会看到面板生成的类似内容:

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
    valid_referers none blocked www.example.com example.com;
    if ($invalid_referer) { return 403; }
}

对照这段,检查三件事:自己的主域名在不在、带 www 和不带 www 是不是都写了、none blocked 是不是被删掉了。

第三步:补齐白名单,把 none 和 blocked 加回去

这一步解决 90% 的静态资源 403。在「防盗链」标签页的允许域名框里,把下面这些全部填进去,每行一个或用英文逗号分隔:

none
blocked
example.com
*.example.com
localhost
127.0.0.1

子域名多的话用 *.example.com 通配;如果站点跑在非 80/443 端口,要写成 example.com:8080 这种带端口的形式。

注意:none(允许完全没有 Referer 的请求)和 blocked(允许 Referer 被抹掉的请求)是 Nginx 的关键词,不能写成 None、NULL、空,也不能加引号。

注意:valid_referers 后面只写域名,不要带 http://、https:// 前缀,也不要带路径。写成 https://example.com 会匹配不上,因为 Nginx 比对的是 Referer 去掉协议后的主机名部分。

第四步:保存并重载 Nginx

这一步让配置真正生效。点「保存」后,小皮面板一般会自动重载,但为了保险,去左侧「软件商店」→ 已安装 → Nginx → 点「重载配置」。也可以 SSH 登录后手动执行:

/www/server/nginx/sbin/nginx -t
/www/server/nginx/sbin/nginx -s reload

第一条命令输出 syntax is ok 和 test is successful 才算配置没问题,有报错就别 reload。

注意:如果 nginx -t 报错但你改的是面板界面,说明面板生成的配置本身有问题,回「配置文件」标签页手工检查那几行,或者直接删掉整段防盗链配置重新设置一遍。

第五步:让防盗链只拦图片视频,放行 CSS/JS/字体

这一步是可选的精细化处理。CSS、JS、字体这类资源跨域引用很常见(比如 CDN、字体图标),把它们也拦住容易出各种诡异问题,索性不设防。在「配置文件」标签页里,把防盗链的 location 改成只匹配多媒体后缀:

location ~* \.(gif|jpg|jpeg|png|webp|bmp|mp4|flv)$ {
    valid_referers none blocked *.example.com example.com;
    if ($invalid_referer) { return 403; }
}

保存重载后,再用第五步的 curl 命令验证:不带 Referer 拿图片返回 200,带别人的 Referer 拿图片返回 403,说明防盗链和放行都到位了。

注意:Nginx 的正则 location 按配置文件里出现的先后顺序匹配,谁写在前面谁先生效。同一份配置里不要既写一个拦全部静态资源的 location,又写一个放行 CSS/JS 的 location,否则先匹配到的那条会赢。

小结

  • 静态资源 403 优先怀疑防盗链,先用 curl -I 对比带与不带 Referer 的结果来定性。
  • 白名单必须包含 none 和 blocked,否则地址栏直开、APP 内嵌、隐私模式全部被拦。
  • 域名不写协议、不写路径,主域名和 www 域名都要写,带端口要写端口,子域名用 *.example.com。
  • 改完一定要重载 Nginx,并用 nginx -t 先验证语法。
  • CSS、JS、字体建议不设防盗链,把规则限制在图片和视频后缀上,能省很多麻烦。
版权声明:本文来自 GJ站长论坛《小皮面板防盗链设置后静态资源无法访问怎么办》
原文链接:https://www.gj0.com/thread-1214.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~