Apache Error AH00957: attempt to connect to backend failed — Решение
Apache возвращает клиенту статус 503 Service Unavailable или 502 Bad Gateway. В error.log фиксируется невозможность установить TCP-соединение с upstream сервером: [proxy:error] [pid 1234:tid 5678] (111)Connection refused: AH00957: HTTP: attempt to connect to 127.0.0.1:8080 (localhost) failed.
| Системная ошибка ядра | Причина | Что проверяется |
|---|---|---|
(111) Connection refused | Бэкенд не запущен или слушает другой порт | Служба бэкенда (Node, Python, Java, Docker) выключена |
(13) Permission denied | SELinux блокирует исходящие сетевые сокеты | Булева переменная httpd_can_network_connect |
(110) Connection timed out | Сетевой экран (Firewall) дропает SYN пакеты | Блокировка портов в ufw / firewalld |
- Веб-сервер не может связаться с нижележащим сервисом.
- Браузер выводит сообщение «HTTP 503: The server is temporarily unable to service your request due to maintenance downtime or capacity problems».
- Проверьте, запущен ли целевой сервис и слушает ли он указанный порт:
sudo ss -tulpn | grep :8080 # Или с помощью curl локально: curl -I http://127.0.0.1:8080 - Если сервис выключен, запустите его и проверьте статус автозагрузки:
sudo systemctl start my-backend-service sudo systemctl status my-backend-service - Критично для RHEL/CentOS/AlmaLinux (SELinux): По умолчанию SELinux запрещает Apache любые исходящие сетевые подключения. Разрешите проксирование:
sudo setsebool -P httpd_can_network_connect 1 # Если проксирование идет на порт СУБД или кастомный сервис: sudo setsebool -P httpd_can_network_relay 1 - Если бэкенд запущен в Docker контейнере, убедитесь, что порт проброшен на хост (
-p 127.0.0.1:8080:8080) или контейнеры находятся в общей сети. - Проверьте локальный сетевой экран, разрешив трафик на локальном интерфейсе
lo:# Для UFW: sudo ufw allow in on lo to 127.0.0.1 port 8080 # Для Firewalld: sudo firewall-cmd --add-port=8080/tcp --permanent && sudo firewall-cmd --reload - Перезагрузите веб-сервер:
sudo systemctl reload apache2 # или httpd.
(13)Permission denied: AH00957 при гарантированно работающем бэкенде — это 100% блокировка со стороны SELinux. Команда setsebool -P httpd_can_network_connect 1 решает проблему навсегда с сохранением правила после перезагрузки ОС.Частые вопросы (FAQ)
Что означает системная ошибка (111) Connection refused?
Код ECONNREFUSED означает, что ядро ОС отправило TCP RST в ответ на пакет SYN, так как на целевом IP-адресе и порту нет ни одной программы, слушающей сокет (служба не запущена).
Почему localhost может не работать в proxy_pass?
В некоторых конфигурациях localhost резолвится в IPv6 адрес ::1, тогда как бэкенд слушает только IPv4 127.0.0.1. Всегда указывайте явный IPv4 адрес: ProxyPass / http://127.0.0.1:8080/.
Как проверить настройки SELinux для Apache?
Выполните команду getsebool -a | grep httpd_can_network.
Что делать, если бэкенд работает через UNIX сокет?
Используйте синтаксис: ProxyPass / unix:/run/backend.sock|http://localhost/.