我在服务器上遇到此错误(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/
?