PHP-FPM - 错误 503 - 尝试连接 Unix 域套接字失败

PHP-FPM - 错误 503 - 尝试连接 Unix 域套接字失败

我在服务器上遇到此错误(CentOs 7):

[proxy:debug] proxy_util.c(2209): [client 80.251.245.153:61902] AH00944: connecting fcgi://127.0.0.1/data/webs/dev/index.php to 127.0.0.1:8000
[proxy:debug] proxy_util.c(2246): [client 80.251.245.153:61902] AH02545: fcgi: has determined UDS as /tmp/php56-fpm.sock
[proxy:debug] proxy_util.c(2418): [client 80.251.245.153:61902] AH00947: connected /data/webs/dev/index.php to httpd-UDS:0
[proxy:error] (2)No such file or directory: AH02454: FCGI: attempt to connect to Unix domain socket /tmp/php56-fpm.sock (*) failed
[proxy_fcgi:error] AH01079: failed to make connection to backend: httpd-UDS
[proxy:debug] proxy_util.c(2171): AH00943: FCGI: has released connection for (*)

套接字存在,我尝试将权限更改为 777,但没有作用:

 ls -l /tmp/php56-fpm.sock
-rw-rw----. 1 apache apache 0 Feb 17 16:11 /tmp/php56-fpm.sock

PHP-FPM www.conf 监听设置(完整文件在这里:https://pastebin.com/uD5GsMna):

听=/tmp/php56-fpm.sock

虚拟主机:

<VirtualHost *:80>
   ServerName dev.stavebninyfranek.com
   DocumentRoot "/data/webs/dev"
   <FilesMatch "\.php$">
     SetHandler  "proxy:unix:/tmp/php56-fpm.sock|fcgi://127.0.0.1"
   </FilesMatch> 
 </VirtualHost>

我的配置文件是(httpd.conf):https://pastebin.com/XS6cDuFQ

我尝试过改变套接字,将权限更改为 apache:apache 用户,但我不知道问题出在哪里。

谢谢

答案1

这可能是由 Apache 上的 systemd 配置引起的,例如在 Centos 7 上,默认情况下该服务配置为:

PrivateTmp=true

这意味着它在 /tmp 中拥有自己的子目录,并且以 /tmp 的形式可见,因此它无法看到其他程序在 /tmp 中添加的文件。解决方案是不要将 /tmp 用于 php-fpm 套接字(比将上述设置为 false 更安全)。

(我意识到至少在一种情况下使用了 Debian 衍生产品,但它也使用了 systemd!)

保利。

答案2

将用户和组更改为您当前的 apache 用户

/etc/php-fpm.d/www.conf 

** 用户和组必须相同/etc/http/conf/http.conf

然后执行

chown -R user.user /run/php-fpm/www.conf

** 更改为您的用户

我相信以上内容适用于 centOS,因为我是 Debian 用户。这实际上是解决 php8 sock 权限问题导致的“503 错误服务不可用”问题的解决方案之一。因此,您在 apache 中的 sock 将位于:

chown -R 用户.user /var/run/php/php8.1-fpm.sock

答案3

我将 apache 从 2.4.10 更新到 2.4.24 后也遇到了同样的问题。使用旧版 apache 时,与 fcgi 的连接可以使用 中的套接字/tmp,而新版 apache 则出现错误(2)No such file or directory。将套接字移至/var/run解决了问题。

查看 的源代码mod_proxy,我发现在较新的 apache 中,路径应相对于 指定的路径DefaultRuntimeDir。在我的配置中,这是在 中设置的/etc/apache2/apache2.conf,它还使用了 中的一些定义/etc/apache2/envvars

答案4

我解决了这个问题,当我使用

/var/运行/php5-fpm.sock

而不是/tmp/并且它正在工作。但是为什么不能使用其他文件夹代替/var/run/

相关内容