我为 Apache 设置了一个带反向代理的 Nginx 服务器(如下教程) 几个月前。一切运行良好,nginx 部分以及 Apache 上的 php 页面。
但是我需要使用 curl 来运行 php,因此我安装了 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>
由于我运行的是 php8 ,我怀疑这php7.4
可能会导致问题。我仔细检查了服务器上的 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
首先就进行了检查。但由于一切似乎都正常,所以我暂时就使用它。