Apache Error AH01079: failed connection to php-fpm.sock — Решение
При попытке открыть любой PHP-сайт Apache возвращает клиенту ошибку 503 Service Unavailable. В системном журнале error.log регистрируется отказ подключения к локальному сокету: [proxy_fcgi:error] [pid 1234:tid 5678] (2)No such file or directory: AH01079: failed to make connection to backend: unix:/var/run/php/php8.2-fpm.sock или (13)Permission denied: AH01079: failed to make connection to backend.
| Код ошибки ядра | Смысл | Причина отказа |
|---|---|---|
(2) No such file or directory | Файл сокета не найден | Служба PHP-FPM выключена или путь к .sock файлу указан неверно |
(13) Permission denied | Доступ запрещен | У пользователя www-data / apache нет прав на чтение/запись в сокет |
(11) Resource temporarily unavailable | Очередь сокета переполнена | Пул PHP-FPM исчерпал воркеры (pm.max_children) |
- Apache не может передать клиентский запрос на исполнение интерпретатору PHP.
- Веб-страница моментально падает с ошибкой 503.
- Проверьте статус и физическое наличие UNIX-сокета PHP-FPM в системе:
# Проверяем работу службы PHP-FPM: sudo systemctl status php*-fpm # Ищем реальное расположение файла сокета: ls -la /run/php/ /var/run/ | grep fpm - Если служба выключена, запустите ее и добавьте в автозагрузку:
sudo systemctl enable --now php8.2-fpm # укажите вашу версию PHP - Проверьте права доступа и владельца сокета в конфигурации пула PHP-FPM (
/etc/php/8.2/fpm/pool.d/www.conf):listen = /run/php/php8.2-fpm.sock listen.owner = www-data listen.group = www-data listen.mode = 0660 - Убедитесь, что в конфигурации виртуального хоста Apache указан абсолютно точный путь к существующему файлу сокета:
<FilesMatch \.php$> SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost" </FilesMatch> - Если на сервере включен SELinux (RHEL/CentOS), разрешите веб-серверу работать с сокетами приложений:
sudo setsebool -P httpd_can_network_connect 1 sudo setsebool -P httpd_execmem 1 - Перезапустите стек сервисов:
sudo systemctl restart php8.2-fpm sudo systemctl restart apache2
/run/php/phpX.Y-fpm.sock, тогда как в RHEL/CentOS/AlmaLinux сокет обычно находится в /run/php-fpm/www.sock. Всегда сверяйте путь с директивой listen в www.conf.Частые вопросы (FAQ)
Почему UNIX-сокет предпочтительнее TCP-порта (127.0.0.1:9000)?
UNIX domain sockets работают напрямую через оперативную память ядра без оверхеда сетевого стека TCP/IP, обеспечивая более низкую задержку (latency) и повышенную пропускную способность.
Что делать, если сокет самопроизвольно удаляется?
Каталог /run/ смонтирован в tmpfs (RAM) и очищается при перезагрузке. Создание каталога /run/php/ должно управляться демоном PHP-FPM или через systemd-tmpfiles (файл /etc/tmpfiles.d/php.conf).
Как проверить права на сокет от имени пользователя веб-сервера?
Выполните проверку прав: sudo -u www-data test -w /run/php/php8.2-fpm.sock && echo 'Write OK' || echo 'Permission Denied'.
Что означает ошибка (11) Resource temporarily unavailable на сокете?
Она означает, что очередь соединений (backlog) сокета PHP-FPM переполнена, так как все доступные воркеры заняты обработкой других запросов. Необходимо увеличить pm.max_children.