You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jailed PHP-FPM TLS/DNS配置:子目录脚本curl加载CA证书报错

故障原因

当前curl.cainfo配置使用的是相对路径etc/ssl/cert.pem,PHP解析相对路径时以脚本运行时的工作目录为基准:

  • 根目录下脚本运行时工作目录为/var/www/html,可匹配到同层级的etc/ssl/cert.pem,因此运行正常
  • 子目录下脚本运行时工作目录为对应子目录路径(如/var/www/html/folder),子目录内无etc/ssl/cert.pem文件,因此抛出加载失败警告
修复方案(PHP-FPM进程池配置调整,二选一即可)

方案1:配置为绝对路径(优先推荐,稳定性最高)

绝对路径不会随脚本所在目录、工作目录切换发生变化,是最稳妥的方案,根据你的隔离模式选对应的配置值:

  • 如果PHP-FPM已开启chroot = /var/www/html做jail隔离,将原有配置修改为:
php_admin_value[curl.cainfo] = /etc/ssl/cert.pem

chroot模式下进程视角的根目录/直接对应宿主机的/var/www/html,该路径会稳定指向jail内的证书文件。

  • 如果未通过FPM chroot做隔离,只是将依赖资源放在站点根目录,将原有配置修改为宿主机绝对路径:
php_admin_value[curl.cainfo] = /var/www/html/etc/ssl/cert.pem

修改完成后重启PHP-FPM服务即可生效,所有目录下的脚本都能正常读取CA证书。

方案2:锁定FPM进程初始工作目录

如果因业务限制不能使用绝对路径,可在对应FPM进程池配置中添加工作目录锁定参数,强制所有PHP进程启动后默认工作在jail根目录:

  • 开启chroot的场景添加:
chdir = /
  • 未开启chroot的场景添加:
chdir = /var/www/html

配置后相对路径etc/ssl/cert.pem会永远以jail根目录为基准解析,子目录脚本也能找到证书。注意该方案存在兼容风险:如果业务代码中有调用chdir()切换工作目录的逻辑,相对路径解析基准还是会变化,导致证书加载失败。

校验方式

配置生效后,分别在站点根目录、子目录下创建测试脚本,发起HTTPS的curl请求,确认不再抛出cafile stream加载失败的警告即可。

内容的提问来源于stack exchange,提问作者Aaron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 01:27:27