【问题标题】:CaBundle open_basedir restrictionCaBundle open_basedir 限制
【发布时间】:2019-06-26 12:12:11
【问题描述】:

我们有一个项目已经投入生产了几个月(它的所有配置都运行良好,没有问题 - 包括 https 和用户访问)。

我们在 Symfony 4 下重写了部分代码(在此之前没有使用任何框架)。一切都在本地完美运行,但是,在生产中,我们开始在日志中收到以下错误:

vendor/composer/ca-bundle/src/CaBundle.php is_dir(): open_basedir restriction in effect. File(/usr/local/etc/openssl) is not within the allowed path(s)

知道是什么原因导致的(嗯......错误很明显,一个修复方法就是将它包含在允许的路径中,但在我了解问题的根本原因之前我不想这样做) ?

重要提示:

  1. 我们没有包含那个特定的捆绑包,它是作曲家的一部分。
  2. Composer 没有失败,并且在 composer install 命令期间没有收到错误。
  3. 尽管有日志行,但项目似乎可以按预期工作。
  4. 我们前面有 Cloudfare,并且在那里正确处理了 https 证书。
  5. 使用过的捆绑包列表很短,但如果需要,我可以提供一个列表。
  6. 我们没有对该包中的函数进行特定调用(如果有的话,是由 symfony/3rd 包中的某些东西进行的,但是快速搜索所有代码(包括供应商)没有发现任何东西)。

我有点想不出可能导致问题的原因,尤其是因为它不会在本地发生,甚至在生产中项目似乎还可以。

【问题讨论】:

    标签: php symfony symfony4 open-basedir


    【解决方案1】:

    CA-bundle 正在尝试从 usr/local/etc/openssl 中读取数据,但它失败了,因为它不在 PHP 进程允许的目录之一中。

    它发生在一台机器上而不是另一台机器上,因为您的本地 openbase_dir 设置与生产环境中的设置不匹配(并且可能非常宽松,因为它通常发生在开发中)。

    你有两个选择:

    • 在生产环境中更改您的 openbase_dir 设置,使其更加宽松,至少对于该特定虚拟主机而言是这样。

    • 检查您要安装的软件包取决于Ca-Bundle,然后删除该软件包,使其不再包含在内。

    进一步阅读:

    【讨论】:

    • 我(不仅是我)在本地实际上有相同的配置(关于 open_basedir 和 openssl)。这就是让我感到困惑的地方。我会继续调查。
    猜你喜欢
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 2011-05-09
    相关资源
    最近更新 更多