【问题标题】:Apache + PHP-FPM + chroot results “File not found.” errorApache + PHP-FPM + chroot 结果“找不到文件”。错误
【发布时间】:2013-04-28 17:42:35
【问题描述】:

我想使用 PHP-FPM 池的 chroot 属性将 chroot 设置为 DocumentRoot。使用下面的设置,无论我做什么,我都只会得到一个“找不到文件”。错误:

/etc/php5/fpm/pool.d/example.conf

[example]
user = example
group = example
listen = /var/run/php_fpm_example.sock
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chroot = /opt/jail/example/home/example
php_admin_value[open_basedir]=/opt/jail/example/home/example

/etc/apache2/sites-enabled/示例

<VirtualHost *:80>
ServerName example.domain.name
ServerAlias www.example.domain.name
DocumentRoot /opt/jail/example/home/example
<Directory /opt/jail/example/home/example>
AllowOverride All
Order Allow,Deny
Allow from all
</Directory>
<IfModule mod_fastcgi.c>
<FilesMatch \.`enter code here`php$>
SetHandler php-script
</FilesMatch>
Action php-script /php5-fpm-handler
Alias /php5-fpm-handler /vhost_example
FastCGIExternalServer /vhost_example -socket /var/run/php_fpm_example.sock
</IfModule>
</VirtualHost>

所以网站本身位于/opt/jail/example/home/example。你可能会觉得奇怪,但没关系,它是由 jailkit 引起的。

感谢您的帮助。

【问题讨论】:

    标签: apache php chroot


    【解决方案1】:

    你有没有 php-fpm 中的 chroot 的工作版本吗?

    你应该从那开始。

    然后,只要您在池中定义了一个 chroot:

    chroot = /opt/jail/example/home/example
    

    您必须从该池中的其他设置中删除此路径:

    • listen
    • chdir
    • php 设置,如 php_admin_value[open_basedir]php_value[include_path]php_admin_value[upload_tmp_dir] 以及所有使用 tmp 目录的设置。

    其他一些人似乎忽略了 chroot,例如 slowlog

    所以你有一个listen = /var/run/php_fpm_example.sock,它的意思是/opt/jail/example/home/example/var/run/php_fpm_example.sock,这应该是apacheFastCGIExternalServer的路径。

    使用 chroot 的 php-fpm 和 FastCGIExternalServer 配置 Apache 非常困难,我 once described it 在 chroot 中使用了一个假的完整目录路径符号链接(丑陋),但是使用新的 Apache 2.4 你应该尝试改用mod_proxy_fcgi 或用 Nginx 替换 Apache。

    【讨论】:

    • 我花了很多时间试图绕过 2.4.10 中 chroot 中的符号链接,但无济于事。 mod_proxy_fcgi 不适用于 UDS(我能说的最好),所以这似乎仍然是使这些部分协同工作的唯一方法(php-fpm、chroot、UDS)
    【解决方案2】:

    您可以使用 doc_root php.ini 指令来避免 chroot 目录中的符号链接。 在您的情况下,将此指令添加到 php-fpm conf 文件(/etc/php5/fpm/pool.d/example.conf)中:

    php_admin_value[doc_root] = /
    

    【讨论】:

      猜你喜欢
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 2014-08-04
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      相关资源
      最近更新 更多