在宝塔面板中添加 referer 限制需将 valid_referers 和 if 判断写入匹配静态资源的 location 块内(如 location ~ .*.(jpg|png|js|css)$),保存后必须点击「重载配置」,并确保规则覆盖实际请求路径。

宝塔面板里直接改 Nginx 配置加 referer 限制,是可行的,但必须注意两点:一是规则要写在正确的位置(不能只丢在 server 块开头),二是宝塔会自动重写配置,手动改完不勾选「禁用配置修改提示」+ 不重启服务,大概率白干。
在哪写 referer 限制规则才生效
Nginx 的 valid_referers 和 if 判断必须放在 location 块内,且该 location 要覆盖到被保护的资源路径(比如图片、视频、JS/CSS)。如果写在 server 根块下,Nginx 会报错或静默忽略。
- 推荐位置:
网站 > 设置 > 配置文件,找到类似location ~ .*\.(jpg|jpeg|png|gif|js|css)$的区块 - 不要写在
include /www/server/panel/vhost/xxx.conf这类被宝塔托管的顶层文件顶部 - 如果站点用了伪静态(如 ThinkPHP/Laravel),确保 referer 规则在
location /或更具体的静态资源匹配块里,而不是只在location ~ \.php$里
正确的 referer 限制写法(含常见坑)
直接抄下面这段进对应 location 块即可,但要注意域名末尾斜杠、协议、大小写——valid_referers 默认不带协议和路径,只比对域名部分。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
valid_referers none blocked server_names *.yourdomain.com yourdomain.com;
if ($invalid_referer) {
return 403;
}
-
none允许空 referer(比如直接在浏览器地址栏输入图片 URL);blocked允许被防火墙或隐私插件 stripped 的 referer(值为非标准字符串) - 写
*.yourdomain.com就能匹配 www 和子域名,但yourdomain.com必须单独列出来,通配符不匹配主域名本身 - 别写
https://yourdomain.com——valid_referers不解析协议和路径,这么写等于完全失效 - 如果站点启用了 HTTPS,但用户用 HTTP 访问并引用资源,referer 值仍是
http://...,而你的规则里只写了https://...,就会误杀
改完配置后必须做的三件事
宝塔不会自动应用你手写的 Nginx 片段,漏掉任一环节都会导致规则不生效。
- 保存配置文件后,点右上角「重载配置」按钮(不是「保存」,也不是「重启 Nginx」)
- 进
网站 > 设置 > SSL,确认「强制 HTTPS」开关状态——如果开了,而 referer 规则里没包含 HTTP 版本域名,就可能拦截自家页面 - 临时用
curl -H "Referer: http://evil.com" https://yourdomain.com/test.jpg测试返回是否为403;再用-H "Referer: https://yourdomain.com"确认正常请求不被拦
最常被忽略的是 location 匹配范围和重载动作——很多人改了配置却没重载,或者把规则塞进了只处理 PHP 的 location 里,结果图片请求根本没走到那条规则。referer 是 HTTP 头,它不区分后端语言,只看请求路径匹配哪个 location。










