Chroot 在 PHP5-FPM + nginx 中不起作用

Chroot 在 PHP5-FPM + nginx 中不起作用

我在“/etc/php5/fpm/php-fpm.conf”中添加了两行。内容如下:

chroot = /home/user/www/public_html
chdir = /

在我的服务器部分:/etc/nginx/sites-available/default:

root /home/user/www/public_html/site.com;
location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param  DOCUMENT_ROOT    /site.com;
    fastcgi_param  SCRIPT_FILENAME  /site.com$fastcgi_script_name;
    fastcgi_param  PATH_TRANSLATED  /site.com$fastcgi_script_name;
}

nginx(或者我认为是 fpm)告诉我:“文件未找到”。好的,我执行以下操作:

root /home/user/www/public_html/site.com;
location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param  DOCUMENT_ROOT    /home/user/www/public_html/site.com;
    fastcgi_param  SCRIPT_FILENAME  /home/user/www/public_html/site.com$fastcgi_script_name;
    fastcgi_param  PATH_TRANSLATED  /home/user/www/public_html/site.com$fastcgi_script_name;
}

现在一切正常。fpm 中的 chroot 有什么问题?是的,顺便问一句 - 为什么我设置了 chroot 值后它现在还能正常工作!我以为它可能使用了另一个配置,但是:

# ps aux | grep php
root      4696  0.0  1.3 221452 13768 ?        Ss   16:52   0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)  

我的错在哪里?如何找出问题的根源?看起来这里的 chroot 并没有 chroot 我的系统 :) 我是否需要做其他事情才能让 chroot 正常工作?

我还有:

# cat /var/log/nginx/site.com-errors.com.log
2014/12/02 17:11:20 [error] 5472#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: ...., server: site.com, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "site.com"

Ubuntu 14.04:

# php5-fpm -v
PHP 5.5.9-1ubuntu4 (fpm-fcgi) (built: Apr  9 2014 17:11:57)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies

# nginx -v
nginx version: nginx/1.4.6 (Ubuntu)

看来 chroot 在 php5-fpm 中不再起作用了。之前它对我来说还能用一段时间。

答案1

因此,您在 chroot 中运行一个池,但您的路径指向没有 chroot 的目录树。您应该更改fastcgi_param选项中的路径以反映 chroot 内的实际路径,这样 chrooted php-fpm 就能正确理解在哪里查找 php 脚本。

答案2

我已经解决了这个问题。我没有对我的配置做任何更改。我刚刚执行了“aptitute update && aptitude upgrade”,然后它就可以与上面列出的配置配合使用了。所以我认为那是一个错误。

相关内容