gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:19:23 27 4
gpt4 key购买 nike

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

我究竟做错了什么?

最佳答案

您可以将 suPHP 替换为 FastCGI+PHP-FPM,但您需要为每个用户设置一个 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,您可以获得每个用户的 php.ini,您可以在不重新启动 Web 服务器的情况下对其进行编辑,使用 PHP-FPM,所有池共享相同的 php.ini,您需要重新启动 FPM 守护程序以重新加载它。

关于php - 在 ubuntu 14.04 上使用 FastCGI php5-fpm 的 Apache 2.4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25681639/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com