Получение 503 с помощью apache proxy_fcgi_module [решено]

Я использую CentOS 9 Stream на виртуальной машине, пытаюсь настроить свой сервер Apache для отображения содержимого PHP в Интернете. Сервер работает нормально, когда это просто HTML, но я получаю эти ошибки (503 в браузере), когда пытаюсь использовать PHP. Мой httpd.conf — это, по сути, минимум для запуска сервера с виртуальными хостами, и единственное, что я добавил, — это SetHandler для файлов php. Я не очень хорошо знаком с php, но, насколько я понимаю, он делает следующее: когда сервер получает запрос на файл php, он вызывает службу php-fpm для его обработки.

Службы httpd и php-fpm работают, и я установил для SELinux bool httpd_can_network_connect значение 1, поскольку я прочитал, что это может привести к ошибке 503.

/var/log/httpd/error.log говорит:

      [proxy:error] [pid 4807:tid 4812] (111)Connection refused: AH00957: FCGI: attempt to connect to [::]:8000 (*) failed
[proxy_fcgi:error] [pid 4807:tid 4812] [client 192.168.122.1:60494] AH01079: failed to make connection to backend: (null)

мой httpd.conf:

      Listen                  80
Listen                  8080
User                    apache
Group                   apache
ServerRoot              /etc/httpd
ErrorLog                /var/log/httpd/error.log


LoadModule              mpm_event_module        modules/mod_mpm_event.so
LoadModule              systemd_module          modules/mod_systemd.so
LoadModule              unixd_module            modules/mod_unixd.so
LoadModule              authz_core_module       modules/mod_authz_core.so
LoadModule              dir_module              modules/mod_dir.so

LoadModule              proxy_module            modules/mod_proxy.so
LoadModule              proxy_fcgi_module       modules/mod_proxy_fcgi.so


<Directory />
        Require all denied
</Directory>

<Directory /var/www/html>
        Require all granted
</Directory>

<Directory /srv/www>
        Require all granted
</Directory>


<VirtualHost 192.168.122.60:80>
        DocumentRoot "/var/www/html"
        DirectoryIndex  index.html
</VirtualHost>

<VirtualHost 192.168.122.60:8080>
        DocumentRoot "/srv/www"
        DirectoryIndex  index.php

        <FilesMatch \.php$>
            SetHandler "proxy:fcgi:/run/php-fpm/www.sock"
        </FilesMatch>
</VirtualHost>

и мой www.conf:

      listen = /run/php-fpm/www.sock
listen.owner = apache
listen.group = apache
listen.allowed_clients = 127.0.0.1

РЕШЕНИЕ: Как отметил AlexD, проблема заключалась в том, что Apache пытался подключиться через локальный хост, а не через сокет. Мне удалось заставить его работать, изменив файлы конфигурации для прослушивания 127.0.0.1:9000. Если я хочу использовать сокет unix, мне нужно изменить httpd.conf следующим образом:

      <Proxy "unix:/run/php-fpm/www.sock|fcgi://php-fpm">
   ProxySet disablereuse=off
</Proxy>

<FilesMatch \.php$>
   SetHandler proxy:fcgi://php-fpm
</FilesMatch>

Нашел эту конфигурацию здесь: https://tecadmin.net/install-apache-php-fpm-centos-8/

2 ответа

Еще один возможный ответ (по крайней мере, так случилось со мной). Моя конфигурация была полностью правильной, и после подтверждения Apache запустился без проблем. К сожалению, этот процесс не запускает PHP-FPM автоматически, для чего требуется следующая строка:

      service php8.1-pfm start

(Это PHP v8.1 в Ubuntu 23.04, ваша версия может отличаться). В моем случае это переходит вsupervisordconfig, чтобы его можно было использовать в контейнере докеров.)

Все остальные конфигурации остались по умолчанию. Для полноты вот соответствующие фрагменты Dockerfile. Спасибо https://www.howtoforge.com/how-to-enable-http-2-in-apache/ .

      RUN apt-get install -y php8.1-fpm
...
RUN a2enmod http2
RUN a2dismod php8.1
RUN a2enconf php8.1-fpm
RUN a2enmod proxy
RUN a2enmod proxy_fcgi
RUN a2dismod mpm_prefork
RUN a2enmod mpm_event

Сообщение об ошибке(111)Connection refused: AH00957: FCGI: attempt to connect to [::]:8000 (*) failedуказывает, что ваш Apache пытается подключиться к серверной части через TCP-порт 8000, в то время как вашPHP-FPMпрослушивает сокет unix/run/php-fpm/www.sock. Вероятно, вы забыли перезапустить Apache.

Другие вопросы по тегам