我正在迁移到一个新的服务器来升级我的内部组件,在启动我的 Apache 和 PHP 时遇到了这个错误
[Fri Apr 09 16:51:26.243820 2021] [proxy:error] [pid 31179:tid 140021109556992] (13)Permission denied: AH02454: FCGI: attempt to connect to Unix domain socket /run/php-fpm/www.sock (*) failed
[Fri Apr 09 16:51:26.243868 2021] [proxy_fcgi:error] [pid 31179:tid 140021109556992] [client 47.213.222.69:56165] AH01079: failed to make connection to backend: httpd-UDS
该/run/php-fpm/www.sock
文件确实存在,但它具有 root:root 权限。我的 Web 服务器在非默认用户下运行apache
(该用户是sites
)
经过大量搜索我找到了这篇文章PHP-FPM - 错误 503 - 尝试连接 Unix 域套接字失败并发现该/run/php-fpm/www.sock
文件需要分配给运行 httpd 的同一用户。所以我照做了$chown sites: /run/php-fpm/www.sock
,一切开始正常工作。
但是,如果重新启动 php-fpm 服务,权限将恢复为 root:root,并且 PHP 页面将返回 503
因此我检查/etc/php-fpm.d/www.conf
并更新了这些行:
user = sites
group = apache
.
.
.
listen.owner = sites
listen.group = apache
我www.sock
再次更改了文件的所有权,但当 php-fpm 服务重新启动时,它仍然会将该文件的权限恢复www.sock
为root:root
所以我被难住了,而且在我的搜索中似乎找不到关于这个错误的信息。我知道使用 chown 命令可以解决这个问题,但是如果我的服务器将来需要重新启动,我怀疑我会记得这样做,除非我添加 @reboot cron 或类似的东西,但我不应该这样做。我一定是在某个地方缺少一些配置,我就是找不到它。
我的系统信息:Centos 8 Stream,PHP 7.2.24,Apache 2.4.37
答案1
我遇到了同样的问题,我的配置文件/etc/php-fpm.d/www.conf和你的一样正确。
当我看到我的php-fpm.service以 root 身份启动。
我编辑文件/usr/lib/systemd/system/php-fpm.service并添加:
[service]
User=youruser
Group=YourGroup
还请检查文件中看到的所有路径的权限:/etc/php-fpm.conf,例如日志文件。
答案2
www.conf 中有以下条目:
listen.owner
listen.group
listen.mode
我猜想它们默认为不允许任何人访问,因此 Web 服务器无法访问 sock 文件。我更改了这三个设置(实际上是启用了),并将我的 httpd 用户和组添加为所有者和组,将模式设置为 755(因为 644 不起作用),现在 Web 服务器可以正常工作并与 php 通信。我不知道这是否是正确的解决方案,或者 acl_users 是否更“正确”……但看起来这两种方法都有效。
答案3
[2023 年更新]
总结
listen.acl_groups
必須無效。
解释
唯一的问题listen.acl_groups
是/etc/php-fpm.d/www.conf
如果已设置,则listen.owner 和 listen.group 被忽略,正如其自己的评论所解释的那样:
; When POSIX Access Control Lists are supported you can set them using
; these options, value is a comma separated list of user/group names.
; When set, listen.owner and listen.group are ignored
解决方案
因此,解决方案是将其更改为 void 值,如下所示:
listen.acl_groups =
我在 Almalinux、Rocky Linux、CentOS、RedHat 8 和 9 上验证了此行为
答案4
如果您在 Ubuntu 中使用 Apache2,请在池文件中进行以下更改:
listen.owner = www-data
listen.group = www-data