【问题标题】:Apache 2.4 with FastCGI php5-fpm on ubuntu 14.04在 ubuntu 14.04 上使用 FastCGI php5-fpm 的 Apache 2.4
【发布时间】:2014-10-30 03:46:07
【问题描述】:

我正在尝试用 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

我做错了什么?

【问题讨论】:

    标签: php ubuntu apache2 fastcgi suphp


    【解决方案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 守护程序才能重新加载它。

    【讨论】:

      【解决方案2】:

      whoami 只显示您当前的用户,当前脚本在该用户下运行。

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

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

      export APACHE_RUN_USER=www-data
      export APACHE_RUN_GROUP=www-data
      

      【讨论】:

      • 好的,所以使用 fastcgi 我无法复制 suPHP 行为?我只需要以所有者身份运行 PHP 文件(这就是我使用 suPHP 的原因)。更改 apache 用户并不能解决我的问题。我需要运行 PHP 文件而不是作为单个用户,每个文件都需要作为所有者的用户运行
      • 不,你不能。 suPHP 的目的是提供这样的行为,这是相当不寻常的。如果需要,您应该继续使用 suPHP。
      • 哦,好吧,但我发现这个线程fastcgi.com/archives/fastcgi-developers/2011-May/000717.html 谈到了完全相同的事情,并且那个人能够解决它。我不知道怎么做!
      • 为什么,首先,您需要以 php 文件的所有者身份运行它?
      • fastcgi.com/archives/fastcgi-developers/2011-May/000720.html "已解决 - php 5.3.3 必须配置 --enable-fpm (FastCGI Process Manager)。"我需要创建一个大规模的虚拟主机环境,而 suPHP 为我完成了这项工作,它允许所有文件由其特定用户运行...
      猜你喜欢
      • 2016-04-05
      • 2019-11-08
      • 1970-01-01
      • 2014-12-04
      • 2018-08-24
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      相关资源
      最近更新 更多