在phpEnv环境中部署站点后,图片、视频等静态资源很容易被其他站点直接引用,导致服务器带宽被无效消耗,甚至影响正常用户的访问体验。通过配置Nginx的防盗链规则,可以限制只有指定域名的请求才能访问这些资源,从服务端层面避免资源被盗用。

防盗链的基本原理
防盗链的核心是通过检查HTTP请求头中的Referer字段,判断发起请求的域名是否在允许的列表中。如果请求的Referer不在允许范围内,Nginx可以直接返回403禁止访问的状态码,或者返回一张默认的提示图片。
phpEnv中Nginx配置文件的位置
首先打开phpEnv的安装目录,找到对应站点使用的Nginx配置文件,默认路径为phpEnv安装目录nginxconfvhost,里面每个.conf文件对应一个虚拟主机的配置。也可以直接在phpEnv的面板中,找到对应站点的配置编辑入口,直接修改配置文件。
具体的防盗链配置步骤
1. 编辑站点Nginx配置
打开需要配置防盗链的站点配置文件,找到处理静态资源的location块,通常处理图片的location配置如下:
location ~ .*.(gif|jpg|jpeg|png|bmp|swf|ico)$ {
expires 30d;
access_log off;
}
2. 添加防盗链规则
在上面的location块中添加valid_referers指令,设置允许的访问域名,修改后的完整配置如下:
location ~ .*.(gif|jpg|jpeg|png|bmp|swf|ico)$ {
# 允许的域名列表,none表示允许无Referer的请求(比如浏览器直接访问图片)
valid_referers none blocked *.yourdomain.com yourdomain.com 127.0.0.1;
# 如果Referer不在允许列表,返回403
if ($invalid_referer) {
return 403;
# 也可以替换为返回指定提示图片,比如:
# rewrite ^/ https://127.0.0.1/static/forbidden.jpg;
}
expires 30d;
access_log off;
}
配置参数说明:
valid_referers:定义允许的Referer来源,none表示请求头中没有Referer字段的请求(比如用户直接在浏览器地址栏输入图片地址访问),blocked表示Referer字段存在但被防火墙或者代理服务器隐藏的情况,后面的域名是允许访问的具体域名,支持通配符匹配。$invalid_referer:Nginx内置变量,如果请求的Referer不在valid_referers列表中,该变量值为1,否则为0。
3. 重载Nginx配置
修改完配置文件后,不需要重启整个phpEnv,只需要在phpEnv面板中点击Nginx的重载配置按钮,或者手动执行Nginx的重载命令,让配置生效即可。
配置验证方法
配置生效后,可以通过以下两种方式验证防盗链是否生效:
- 直接在浏览器中访问站点的图片地址,能正常显示说明允许无
Referer的请求配置生效。 - 创建一个其他域名的测试页面,页面中通过
<img>标签引用站点内的图片,如果图片无法加载或者返回403,说明防盗链规则生效。
注意事项
如果站点需要允许搜索引擎爬虫访问图片,可以把常见的搜索引擎域名添加到valid_referers列表中,比如*.baidu.com、*.google.com等。另外如果站点使用了CDN,需要把CDN的域名也添加到允许列表中,避免正常访问被拦截。