找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 15|回复: 0

[维护日志] [2026-07-01] [运维] [open_basedir多站点冲突] - 宝塔新建站点PHP路径继承问题修复

[复制链接]
  • 打卡等级:本地老炮

9337

威望

7439

金钱

1万

贡献

管理员

自由的灵魂

积分
107425
主题
5630
回帖
26661
注册时间
2003-4-10
最后登录
2026-10-1
发表于 2026-7-1 18:31:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

1、问题缘起

在服务器上部署 Discuz! X5 测试站(x5.dianbo.org)时,访问首页出现 open_basedir restriction in effect 错误,错误信息中引用的路径仍然是主站 www.dianbo.org 的目录,而非新站点的目录。

完整错误信息:

  1. 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

  2. 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

  3. 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):
  1. server {
  2.     listen 8445;  # 错误:未使用 8443 回源端口
  3.     server_name x5.dianbo.org;
  4.     root /www/wwwroot/x5.dianbo.org;
  5.     include enable-php-82.conf;  # 仅 include,无显式 open_basedir
  6.     # 缺少 location ~ \.php$ 块
  7. }
复制代码


修改后:
  1. server {
  2.     listen 127.0.0.1:8443;  # 修正:使用标准回源端口
  3.     server_name x5.dianbo.org;
  4.     root /www/wwwroot/x5.dianbo.org;
  5.    
  6.     location ~ \.php$ {
  7.         include fastcgi.conf;
  8.         fastcgi_pass unix:/tmp/php-cgi-82.sock;
  9.         fastcgi_param PHP_ADMIN_VALUE "open_basedir=/www/wwwroot/x5.dianbo.org/:/tmp/:/proc/";
  10.     }
  11. }
复制代码


雷池配置:
  • 应用域名:x5.dianbo.org
  • 监听端口:80、443/HTTPS
  • 上游服务器:http://127.0.0.1:8443

4、最终实现效果

场景处理前处理后
访问首页open_basedir 错误✅ 正常显示 X5 安装/首页
访问 /install/404✅ 正常进入安装向导
PHP 配置继承主站路径✅ 独立指向 /x5.dianbo.org/


5、重要技术沉淀

需更新到固化摘要:

  1. 二十三、新建站点 open_basedir 配置(2026-07-01)

  2. 现象:新建站点后访问出现 open_basedir restriction in effect,路径指向其他站点
  3. 原因:新站点未显式配置 location ~ \.php$ 块,继承了全局或主站的 open_basedir 设置
  4. 解决:在站点 Nginx 配置中添加独立的 PHP location 块,明确指定 open_basedir 路径
  5. 关键配置:
  6.   fastcgi_param PHP_ADMIN_VALUE "open_basedir=/www/wwwroot/[站点域名]/:/tmp/:/proc/";
  7. 预防:新建站点后,检查并确认 PHP location 块是否存在且路径正确
复制代码


踩坑点:

踩坑正确做法
依赖宝塔面板默认的 include enable-php-82.conf显式添加 location ~ \.php$ 块并指定 open_basedir
新站点使用非标准回源端口(如 8445)统一使用 127.0.0.1:8443 回源端口
忘记在雷池中添加新站点应用新建站点后同步在雷池中添加应用并配置上游地址


6、进一步优化可能性

  • 将上述 Nginx 配置模板化,新站点创建后自动复制应用
  • 在宝塔面板站点创建脚本中预置 PHP location 块配置

不懂就搜!点此搜点拨论坛。如果本坛没有,请尝试点此问AI,或跟帖提问。
发帖前注意看置顶帖。
不定期借助AI对点拨论坛陈年老帖进行挖坟回复,打扰勿怪!
在已经有人回复时,不要在顶楼添加新问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|点拨论坛 |网站地图

GMT+8, 2026-10-2 00:40 , Processed in 0.066135 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表