配置 php-fpm 后,php 进程仍在 www-data 下运行

配置 php-fpm 后,php 进程仍在 www-data 下运行

我将非常感激任何帮助,我已经束手无策了。

客观的:配置 php-fpm,以便我可以在同一台服务器上拥有多个彼此没有写权限的网站,并且让 php-fpm 以各自的用户身份运行,而不是 www-data

服务器信息:

Ubuntu 20.04
Digital Ocean
PHP 7.4.18
Apache/2.4.41
Configuration File (php.ini) Path /etc/php/7.4/fpm

这是我禁用 www.conf 文件时产生的错误:

[Thu May 20 20:49:03.608217 2021] [proxy:error] [pid 79221] (2)No such file or directory: AH02454: FCGI: attempt to connect to Unix domain socket /var/run/php/php7.4-fpm.sock (*) failed
[Thu May 20 20:49:03.608274 2021] [proxy_fcgi:error] [pid 79221] [client 192.88.134.39:42844] AH01079: failed to make connection to backend: httpd-UDS

我已阅读配置指南并更新了所有 .conf 文件。我确实看到有 php-fpm 进程正在为我指定的用户运行:

systemctl status php7.4-fpm
     CGroup: /system.slice/php7.4-fpm.service
             ├─79327 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
             ├─79337 php-fpm: pool user1
             ├─79338 php-fpm: pool user1
             ├─79339 php-fpm: pool user2
             ├─79340 php-fpm: pool user2
             ├─79341 php-fpm: pool www
             └─79342 php-fpm: pool www

但是,当我在 user1 的网站上运行 phpinfo 时,看到以下内容:

$_SERVER['USER'] www-data
$_SERVER['HOME'] /var/www

用户应该是 user1,主目录实际上是 /home/user1/website1.com

我根据 php-fpm 教程调整了这里所有的.conf 文件:

/etc/php/7.4/fpm/pool.d
/etc/apache2/sites-available
/usr/lib/tmpfiles.d

例子:

/etc/php/7.4/fpm/pool.d/user1.com.conf

; pool name ('www' here)
[user1]
user = user1
group = user1
listen = /var/lib/dpkg/alternatives/php-fpm-user1.sock

----

/etc/apache2/sites-available/user1.com.conf

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName user1.com
    ServerAlias www.user1.com
    DocumentRoot /home/user1/user1.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

<Directory /home/user1/user1.com/>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>

<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost"
</FilesMatch>

</VirtualHost>

----

/usr/lib/tmpfiles.d/php7.4/php7.4-fpm.conf

#Type Path                  Mode UID      GID      Age Argument
    d /run/php              0755 user1 user1 -   -

.sock 文件在这里正确生成:

/var/lib/dpkg/alternatives/php-fpm-user1.sock
/var/lib/dpkg/alternatives/php-fpm-user2.sock

phpinfo 正确显示了这一点:

Server API FPM/FastCGI

但是当我重命名/禁用此文件时,服务器抛出 503 服务不可用,我猜测是因为网站仍以 www-data 身份运行:

/etc/php/7.4/fpm/pool.d/www.conf

我遗漏了什么,谢谢。

编辑:我通过拆除整个服务器并从头开始使用 nginx 而不是 apache 并遵循以下指南解决了该问题:

https://www.vultr.com/docs/use-php-fpm-pools-to-secure-multiple-web-sites

而且效果非常好。真是让人松了一口气。

答案1

我还没有完全调查这里的这个问题,但发现三天内没有人回答,因此提出了一个观察结果:

我希望 Apache 通过特定用户 sock 与 php 通信。具体来说,希望有以下行:

SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost"

成为:

SetHandler "proxy:unix:/var/lib/dpkg/alternatives/php-fpm-user1.sock|fcgi://localhost"

相关内容