Apache + PHP-FPM + chroot结果“找不到文件。”错误

时间:2013-04-28 17:42:35

标签: apache php chroot

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

/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的/网站启用/示例

<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引起的。

感谢您的帮助。

2 个答案:

答案 0 :(得分: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目录的所有设置。

其他一些人似乎忽略了像slowlog这样的chroot。

所以你有listen = /var/run/php_fpm_example.sock,这意味着/opt/jail/example/home/example/var/run/php_fpm_example.sock,这应该是apache FastCGIExternalServer的路径。

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

答案 1 :(得分:0)

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

php_admin_value[doc_root] = /