PHP-FPM – Ошибка 503 – Не удалось подключиться к сокету домена Unix

Вопрос или проблема

Я получаю эти ошибки на сервере (CentOs 7):

[proxy:debug] proxy_util.c(2209): [client 80.251.245.153:61902] AH00944: подключение fcgi://127.0.0.1/data/webs/dev/index.php к 127.0.0.1:8000
[proxy:debug] proxy_util.c(2246): [client 80.251.245.153:61902] AH02545: fcgi: определено UDS как /tmp/php56-fpm.sock
[proxy:debug] proxy_util.c(2418): [client 80.251.245.153:61902] AH00947: подключено /data/webs/dev/index.php к httpd-UDS:0
[proxy:error] (2)Нет такого файла или директории: AH02454: FCGI: попытка подключиться к сокету Unix /tmp/php56-fpm.sock (*) не удалась
[proxy_fcgi:error] AH01079: не удалось установить соединение с бэкендом: httpd-UDS
[proxy:debug] proxy_util.c(2171): AH00943: FCGI: соединение освобождено для (*)

Сокет существует, я пытался установить права 777, но это не сработало:

 ls -l /tmp/php56-fpm.sock
-rw-rw----. 1 apache apache 0 Фев 17 16:11 /tmp/php56-fpm.sock

Настройка прослушивания www.conf PHP-FPM (целый файл здесь: https://pastebin.com/uD5GsMna):

listen=/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, но я не знаю, где проблема.

Спасибо

Это может быть вызвано конфигурацией systemd для Apache. Например, на Centos 7 и Ubuntu 18.04+ по умолчанию служба Apache (см. systemctl cat apache2) настроена с:

PrivateTmp=true

Это означает, что процесс Apache получает свою собственную подкаталог в /tmp, доступный как /tmp, и поэтому не может видеть файлы в /tmp, добавленные другими программами (ищите подкаталог /tmp, который начинается с “systemd-private” и включает “apache2.service” – это он), и то же самое для /var/tmp. Решение будет не использовать /tmp или /var/tmp для ваших сокетов php-fpm (это более безопасно, чем установка PrivateTmp=false для Apache).

paulie.

Измените пользователя и группу на вашего текущего пользователя apache

/etc/php-fpm.d/www.conf 

** пользователь и группа должны быть такими же, как в /etc/http/conf/http.conf

Затем выполните

chown -R user.user /run/php-fpm/www.conf

** измените на вашего пользователя

Я считаю, что вышеуказанное относится к centOS, потому что я пользователь Debian. Это на самом деле одно из решений проблемы ‘503 error service unavailable’, вызванной проблемой с правами сокета php8. Поэтому ваш сокет в apache будет находиться по адресу:

chown -R user.user /var/run/php/php8.1-fpm.sock

У меня возникла такая же проблема после обновления Apache с 2.4.10 до 2.4.24. С старым Apache соединение с fcgi работало с сокетом в /tmp, в то время как новый Apache выдавал ошибку (2)Нет такого файла или директории. Перемещение сокета в /var/run решило проблему.

Изучая исходный код для mod_proxy, я обнаружил, что в новой версии Apache путь должен быть относительным к тому, что указано в DefaultRuntimeDir. В моей конфигурации это установлено в /etc/apache2/apache2.conf, и он также использует некоторые определения из /etc/apache2/envvars.

Убедитесь, что “listen” пользователь и группа в вашем /etc/php/php-fpm.d/www.conf (или в аналогичном месте или пуле PHP-FPM в вашей системе) установлены для соответствия тем, которые у вашего веб-сервера:

; Установите права для unix-сокета, если он используется. В Linux необходимо установить права на чтение/запись,
; чтобы разрешить соединения от веб-сервера. Многие
; системы, производные от BSD, позволяют соединения вне зависимости от прав. Владелец
; и группа могут быть указаны либо по имени, либо по их числовым идентификаторам.
; Значения по умолчанию: пользователь и группа устанавливаются как исполняющий пользователь
;                 режим устанавливается на 0660
listen.owner = http
listen.group = http
listen.mode = 0660

В зависимости от вашего веб-сервера и ОС, это могут быть http, www-data, httpd или что-то другое.

Я решил эту проблему, когда я использовал

/var/run/php5-fpm.sock

вместо /tmp/ и это сработало. Но почему нельзя использовать другую папку вместо /var/run/?

В моем случае, при изменении версии PHP, например, на PHP7.4 для конкретного сайта в Ispconfig 3.2.2, файл webxx.conf должен был быть создан в /etc/php/7.4/fpm/pool.d/, но вместо этого он был создан в корне /.

Так что сейчас я просто переместил файл webxx.conf в /etc/php/7.4/fpm/pool.d/ и перезапустил PHP7.4-fpm sudo systemctl restart php7.4-fpm, и это работает корректно.

Ответ или решение

Ошибка 503 PHP-FPM – Попытка подключения к сокету Unix не удалась

Ошибка 503 "Service Unavailable" с сообщением о неудачной попытке подключения к сокету Unix свидетельствует о том, что веб-сервер (в вашем случае Apache) не может получить доступ к PHP-FPM через указанный сокет. Ваша конфигурация, судя по приведенным логам и настройкам, имеет несколько направлений для диагностики и исправления проблемы. Давайте подробнее рассмотрим основные возможные причины и способы их решения.

1. Проверка конфигурации сокета

Согласно логам, Apache пытается подключиться к сокету /tmp/php56-fpm.sock, который существует, но у него могут быть неправильные права доступа. Ваша команда ls -l /tmp/php56-fpm.sock показывает, что права установлены следующим образом: -rw-rw----. 1 apache apache. Это означает, что доступ к сокету имеют только пользователь apache и группа apache.

Поскольку apache и php-fpm могут работать от разных пользователей, необходимо убедиться, что они принадлежат к одной группе или что конфигурация PHP-FPM позволяет доступ к сокету.

2. Изменение конфигурации PHP-FPM

В файле конфигурации PHP-FPM (например, www.conf), который находится в /etc/php-fpm.d/ или аналогичном каталоге, вами должны быть заданы правильные параметры для сокета:

listen = /tmp/php56-fpm.sock
listen.owner = apache
listen.group = apache
listen.mode = 0660

Убедитесь, что listen.owner и listen.group соответствуют учетной записи пользователя вашего веб-сервера. После внесения изменений перезапустите PHP-FPM:

sudo systemctl restart php-fpm

3. Проблемы с конфиденциальностью PHP-FPM

На CentOS 7 по умолчанию Apache запускается с параметром PrivateTmp=true, что означает, что Apache создаёт собственный подкаталог в /tmp, в котором не может видеть файлы, созданные другими процессами. Это может быть причиной, по которой ваша попытка подключения к сокету не удаётся. Чтобы решить эту проблему, рекомендуется изменить местоположение сокета на более подходящее, например, на /var/run/.

Пример изменения конфигурации:

listen = /var/run/php56-fpm.sock

Не забудьте также создать соответствующие каталоги и задать правильные права доступа:

sudo mkdir -p /var/run/php
sudo chown apache:apache /var/run/php
sudo chmod 770 /var/run/php

Также не забудьте перезапустить как PHP-FPM, так и Apache.

4. Diagnostics and Further Considerations

Если ошибка 503 сохраняется, выполните следующее:

  • Проверьте статус PHP-FPM для получения возможных ошибок:

    sudo systemctl status php-fpm
  • Проверьте логи PHP-FPM (обычно находятся в /var/log/php-fpm/www-error.log) для нахождения дополнительных подсказок по ошибкам.

  • Если вы недавно обновили Apache, убедитесь, что ваша версия фактически поддерживает настройки сокета, используемые в вашей конфигурации.

Заключение

Ошибка 503 при подключении к сокету Unix значительно зависит от конфигурации вашего веб-сервера и PHP-FPM. Следуя предложенным рекомендациям, вы должны быть в состоянии диагностировать и исправить проблему. Важно проверить совместимость прав пользователей и групп, а также местоположения сокета, чтобы обеспечить правильную работу вашего веб-приложения.

Оцените материал
Добавить комментарий

Капча загружается...