Я настроил сервер Nginx с обратным прокси для Apache (следуя этомуруководство) несколько месяцев назад. Все работает отлично, часть nginx, а также страницы php на Apache.
Но мне нужно было использовать curl для php и поэтому я установил пакет php-curl с
sudo apt install php-curl
С тех пор я получаю только "500 Internal Server Error" для всех php-страниц. Страницы 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
на самом деле пустая). Я подозревал, что это может быть моей проблемой (см.Невозможно установить PHP-FPM на Apache (не удалось подключиться к серверу FastCGI)), что заставило проверить fastcgi.conf
в первую очередь. Но поскольку все, кажется, работает, я просто пойду с этим пока.