活力39280
在线时间13640 小时
阅读权限200
管理员
自由的灵魂
- 积分
- 107425
- 主题
- 5630
- 回帖
- 26661
- 注册时间
- 2003-4-10
- 最后登录
- 2026-10-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
1、问题缘起
在服务器上部署 Discuz! X5 测试站(x5.dianbo.org)时,访问首页出现 open_basedir restriction in effect 错误,错误信息中引用的路径仍然是主站 www.dianbo.org 的目录,而非新站点的目录。
完整错误信息:
- Warning: is_file(): open_basedir restriction in effect. File(./source/app/index/index.php) is not within the allowed path(s): (/:/tmp/:/proc/) in /www/wwwroot/x5.dianbo.org/index.php on line 20
- Warning: require(): open_basedir restriction in effect. File(/www/wwwroot/x5.dianbo.org/source/app/plugin/plugin.php) is not within the allowed path(s): (/:/tmp/:/proc/) in /www/wwwroot/x5.dianbo.org/index.php on line 27
- Fatal error: Uncaught Error: Failed opening required './source/app/plugin/plugin.php' ... in /www/wwwroot/x5.dianbo.org/index.php on line 27
复制代码
同时,https://x5.dianbo.org/install/ 返回 404,无法进入安装界面。
2、排查过程
| 步骤 | 操作 | 结果 | | 1 | 检查 x5.dianbo.org.conf 文件 | 发现 listen 8445;,未监听 127.0.0.1:8443 | | 2 | 修改 listen 为 127.0.0.1:8443 | 雷池可正常代理,但 open_basedir 错误依旧 | | 3 | 检查配置中是否有 PHP location 块 | 缺失 location ~ \.php$ 块 | | 4 | 确认问题根因 | 新站点未显式配置 PHP 处理规则,继承了主站的 open_basedir 配置 |
3、解决方案
(1)简要技术分析:
PHP 的 open_basedir 配置会限制 PHP 脚本可访问的目录范围。当新站点没有显式设置该值时,会继承全局或主站的配置,导致新站点脚本无法访问自己的目录。
(2)修改文件列表:
| 操作 | 文件路径 | | 修改 | /www/server/panel/vhost/nginx/x5.dianbo.org.conf | | 修改 | 雷池 WAF → 添加 x5.dianbo.org 应用 |
(3)关键配置:
修改前(x5.dianbo.org.conf):
- server {
- listen 8445; # 错误:未使用 8443 回源端口
- server_name x5.dianbo.org;
- root /www/wwwroot/x5.dianbo.org;
- include enable-php-82.conf; # 仅 include,无显式 open_basedir
- # 缺少 location ~ \.php$ 块
- }
复制代码
修改后:
- server {
- listen 127.0.0.1:8443; # 修正:使用标准回源端口
- server_name x5.dianbo.org;
- root /www/wwwroot/x5.dianbo.org;
-
- location ~ \.php$ {
- include fastcgi.conf;
- fastcgi_pass unix:/tmp/php-cgi-82.sock;
- fastcgi_param PHP_ADMIN_VALUE "open_basedir=/www/wwwroot/x5.dianbo.org/:/tmp/:/proc/";
- }
- }
复制代码
雷池配置:
- 应用域名:x5.dianbo.org
- 监听端口:80、443/HTTPS
- 上游服务器:http://127.0.0.1:8443
4、最终实现效果
| 场景 | 处理前 | 处理后 | | 访问首页 | open_basedir 错误 | ✅ 正常显示 X5 安装/首页 | | 访问 /install/ | 404 | ✅ 正常进入安装向导 | | PHP 配置 | 继承主站路径 | ✅ 独立指向 /x5.dianbo.org/ |
5、重要技术沉淀
需更新到固化摘要:
- 二十三、新建站点 open_basedir 配置(2026-07-01)
- 现象:新建站点后访问出现 open_basedir restriction in effect,路径指向其他站点
- 原因:新站点未显式配置 location ~ \.php$ 块,继承了全局或主站的 open_basedir 设置
- 解决:在站点 Nginx 配置中添加独立的 PHP location 块,明确指定 open_basedir 路径
- 关键配置:
- fastcgi_param PHP_ADMIN_VALUE "open_basedir=/www/wwwroot/[站点域名]/:/tmp/:/proc/";
- 预防:新建站点后,检查并确认 PHP location 块是否存在且路径正确
复制代码
踩坑点:
| 踩坑 | 正确做法 | | 依赖宝塔面板默认的 include enable-php-82.conf | 显式添加 location ~ \.php$ 块并指定 open_basedir | | 新站点使用非标准回源端口(如 8445) | 统一使用 127.0.0.1:8443 回源端口 | | 忘记在雷池中添加新站点应用 | 新建站点后同步在雷池中添加应用并配置上游地址 |
6、进一步优化可能性
- 将上述 Nginx 配置模板化,新站点创建后自动复制应用
- 在宝塔面板站点创建脚本中预置 PHP location 块配置
|
|