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 中的襪子將位於:

chown -R user.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/run/php5-fpm.sock

而不是/tmp/及其工作。但為什麼不能使用其他資料夾來代替呢/var/run/

相關內容