Apache 2.4使用FastCGI php5-fpm在ubuntu 14.04上

时间:2014-09-05 08:29:41

标签: php ubuntu apache2 fastcgi suphp

我正在尝试用FastCGI替换SuPHP。 早些时候,我有不同的所有者和群组的文件夹。每个小组也都有www-data作为成员。 当使用浏览器运行任何php文件时,它作为文件的所有者运行。 因此,如果文件由用户A(组A - www-data和A作为成员)拥有,则它作为用户A执行

shell_exec('whoami') => return A

现在,我安装了fastcgi并将其配置为运行PHP文件。

这是我的php5-fpm.conf文件

<IfModule mod_fastcgi.c>
                AddHandler php5-fcgi .php
                Action php5-fcgi /php5-fcgi
                Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
                FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
        </IfModule>

我的问题是,现在当我运行A所拥有的同一个文件时,

shell_exec('whoami') => return www-data

我做错了什么?

2 个答案:

答案 0 :(得分:1)

您可以使用FastCGI + PHP-FPM替换suPHP,但是您需要为每个用户设置一个FPM池,并为每个用户设置一个虚拟主机(因为每个用户/池需要单独的FastCgiExternalServer指令,这些指令只有效每个虚拟主机)。

例如,在给定的虚拟根目录中:

<FilesMatch "\.php$">
  SetHandler php5-fcgi
</FilesMatch>
Action php5-fcgi /php5-fcgi-username
Alias /php5-fcgi-username /usr/lib/cgi-bin/php5-fcgi-username
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi-username -socket /var/run/php5-fpm-username.sock -pass-header Authorization

然后在FPM池配置中,您可以使用以下内容:

listen = /var/run/php5-fpm-username.sock
listen.owner = www-data
listen.group = www-data
listen.mode=0660
user = ownerusername
group = ownerusergroup
pm = ondemand
pm.max_children = 30
pm.process_idle_timeout = 120s
pm.max_requests = 50000
catch_workers_output = yes

listen.owner和listen.group FPM池参数是Web服务器的用户/组(该用户是唯一允许连接到PHP-FPM套接字的用户/组)。

用户和组FPM池参数是用于运行PHP脚本的用户和组。

如果您有10个用户,则需要10个FPM池。

使用FastCGI + PHP-FPM时,性能要好得多,但有很多命中但配置调整更难。对于每秒点击次数不多的站点/应用程序,我真的不打扰FastCGI和PHP-FPM。此外,使用suPHP,您可以在不重新启动Web服务器的情况下编辑每个用户的php.ini,PHP-FPM所有池共享相同的php.ini,您需要重新启动FPM守护程序以重新加载它。

答案 1 :(得分:0)

whoami只显示当前用户,当前脚本正在运行。

在ubuntu中通过fastcgi运行脚本为www-data用户,而不是拥有该文件的用户。这是设计使用,它可以帮助您限制Web脚本访问他们不允许访问的文件。如果需要更改此行为,则需要更改用户apache正在配置文件中的某个位置运行。

在我的系统上,这是通过设置这两个环境变量在/etc/apacyhe2/envvars中指定的:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
相关问题