2013-04-28 49 views
1

我想使用PHP-FPM池的chroot属性将chroot设置为DocumentRoot。使用下面的设置,无论我做什么,我只会得到一个“未找到文件”。错误:Apache + PHP-FPM + 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引起的。

感谢您的帮助。

回答

1

你有没有在PHP-FPM的chroot的工作版本?

你应该从那开始。

然后只要你在游泳池定义一个chroot:

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

你将不得不删除这条道路从其他设置EIN这个池:

  • 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的路径。用chroot的PHP-FPM和FastCGIExternalServer的Apache

配置是相当困难的,我once described it用在chroot(丑)内的假完整的目录路径的符号链接,但随着新的Apache 2.4你应该尝试使用mod_proxy_fcgi代替或者用Nginx替换Apache。

+0

我花了很多时间试图让周围的符号链接在2.4.10的chroot里面,但无济于事。 mod_proxy_fcgi不适用于UDS(最好我可以告诉),所以这似乎仍然是使这些部分协同工作的唯一方法(php-fpm,chr​​oot,UDS) – threeve 2016-04-06 14:10:39

0

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

php_admin_value[doc_root] =/