我為 Apache 設定了一個帶有反向代理的 Nginx 伺服器(如下教學)幾個月前。一切都運作得很好,nginx 部分以及 Apache 上的 php 頁面。
但我需要對 php 使用curl,因此我安裝了 php-curl 套件
sudo apt install php-curl
從那時起,我的所有 php 頁面都只收到「500 內部伺服器錯誤」。 nginx 頁面和 html 頁面仍然可以正常運作。
我不知道該如何找到這件事的罪魁禍首。我嘗試再次卸載該軟體包並重新啟動該服務sudo systemctl reload apache2
(處於活動狀態並且sudo systemctl status apache2
沒有顯示錯誤)
但這在錯誤日誌 ( /var/log/apache2/error.log
) 中:
[fastcgi:error] [pid 9587:tid 140151397275200] (2)No such file or directory: [client xxx.xxx.xxx.xxx:49342] FastCGI: failed to connect to server "/usr/lib/cgi-bin/php-fcgi": connect() failed
[fastcgi:error] [pid 9587:tid 140151397275200] [client xxx.xxx.xxx.xxx:49342] FastCGI: incomplete headers (0 bytes) received from server "/usr/lib/cgi-bin/php-fcgi"
PS:我不確定這是否相關,但我在 ubuntu 21.10 上設定了伺服器,並在它停止工作之前不久更新到了 22.10。更新後它肯定仍然有效,但也許更新期間服務沒有重新啟動並且安裝 php-curl 觸發了重新啟動?
答案1
問題出在文件中/etc/apache2/mods-enabled/fastcgi.conf
,對我來說它是這樣的:
<IfModule mod_fastcgi.c>
AddHandler fastcgi-script .fcgi
FastCgiIpcDir /var/lib/apache2/fastcgi
AddType application/x-httpd-fastphp .php
Action application/x-httpd-fastphp /php-fcgi
Alias /php-fcgi /usr/lib/cgi-bin/php-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php-fcgi -socket /run/php/php7.4-fpm.sock -pass-header Authorization
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
我懷疑這php7.4
可能會導致問題,因為我運行 php8。我仔細檢查了伺服器上的 php 版本(使用php --version
)並相應地更改了相應的行:
FastCgiExternalServer /usr/lib/cgi-bin/php-fcgi -socket /run/php/php8.1-fpm.sock -pass-header Authorization
然後我重新啟動了 apache ( sudo systemctl status apache2.service
),現在它似乎又可以運作了。
Alias
該文件夾/usr/lib/cgi-bin/php-fcgi
不存在(/usr/lib/cgi-bin
實際上是空的)仍然令我惱火。我懷疑這可能是我的問題(參見無法在 Apache 上安裝 PHP-FPM(無法連線到 FastCGI 伺服器)),這fastcgi.conf
首先進行了檢查。但由於一切似乎都有效,所以我現在就這樣吧。