![PHP-FPM - 錯誤 503 - 嘗試連線到 Unix 網域套接字失敗](https://rvso.com/image/717734/PHP-FPM%20-%20%E9%8C%AF%E8%AA%A4%20503%20-%20%E5%98%97%E8%A9%A6%E9%80%A3%E7%B7%9A%E5%88%B0%20Unix%20%E7%B6%B2%E5%9F%9F%E5%A5%97%E6%8E%A5%E5%AD%97%E5%A4%B1%E6%95%97.png)
我在伺服器上收到此錯誤(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/
?