#Симптом и границы применимости
Ошибка HTTP 502 у Apache обычно связана с его ролью обратного прокси: mod_proxy_http, mod_proxy_fcgi или балансировщиком. Обычная отдача статического файла Apache не должна создавать 502 из-за «обновления модуля». Если после обновления сбоит лишь часть URL, выясните, какой обработчик используется именно для них.
#Возможные причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Сбой соединения с PHP-FPMmod_proxy_fcgi может не связаться с обработчиком. | Только PHP URL дают 502, в error_log AH01079/AH01075 | Проверить сокет/порт и журнал PHP-FPM |
| Устаревшее или неверное правило ProxyPassЧасть запросов уходит в отдельный сервис. | Сбой только /api/ или /backend/ | Проверить порядок правил и назначение upstream |
| Несовместимая конфигурация после обновленияПосле обновления могли измениться используемые модули и их конфигурация. | Логи содержат ошибку конкретного обработчика | Проверить изменение настроек/модулей на стенде |
#Пошаговая диагностика и исправление
- Ограничьте неисправность двумя URLС клиентского терминала проверьте один работающий файл CSS и один проблемный URL, по возможности без секретов/состояния. Зафиксируйте HTTP-код и время: если статика 200, а динамика 502, начните с цепочки Apache → приложение.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаПодставьте безопасные существующие URL: -I отправляет HEAD, приложение может реагировать иначе, чем на GET.
curl -I https://example.com/health; curl -I https://example.com/assets/site.css
- Проверьте журнал Apache по времениВ SSH откройте error_log виртуального хоста, из конфигурации найдите ErrorLog. У mod_proxy_fcgi бывают записи с идентификаторами AH010xx, у mod_proxy_http — другие сообщения подключения и тайм-аутов. Не диагностируйте только по HTTP-статусу.
- Debian пример; в RHEL может быть /var/log/httpd/error_logLinux · Терминал (Bash)КомандаНужен sudoDebian пример; в RHEL может быть /var/log/httpd/error_log. Не публикуйте личные данные.
sudo tail -n 100 /var/log/apache2/error.log
- Проверьте, какие модули реально загруженыКоманда -M выводит модульный состав. Ищите proxy_module и нужный proxy_fcgi_module или proxy_http_module. Загрузка модуля не означает, что соответствующий backend здоров; отдельно проверьте сервис PHP-FPM или upstream.
- Debian/Ubuntu команда, RHEL обычно apachectl -MLinux · Терминал (Bash)КомандаНужен sudoDebian/Ubuntu команда, RHEL обычно apachectl -M.
sudo apache2ctl -M | grep -E "proxy|http2|mpm"
- Найдите конкретное правило обработкиПроверьте ProxyPass, ProxyPassMatch, SetHandler и балансы для проблемного пути. В панели хостинга может быть отдельный файл конфигурации виртуального хоста. Не копируйте конфигурацию второго сайта: пути к сокетам и upstream могут отличаться.
- Только чтение; на других дистрибутивах путь меняетсяLinux · Терминал (Bash)КомандаНужен sudoТолько чтение; на других дистрибутивах путь меняется.
sudo grep -R -nE "ProxyPass|ProxyPassMatch|SetHandler|balancer://" /etc/apache2/sites-enabled/
- Сверьте доступность целевого сервисаДля TCP upstream проверьте локальный порт через ss и curl к специальному безопасному health URL; для Unix-сокета используйте ss -xlpn и namei -l. Если PHP-FPM отдаёт ошибку запуска, сначала исправьте PHP-FPM, а не перенастраивайте Apache.
- Обе команды показывают открытые сокеты, но не проверяют здоровье приложенияLinux · Терминал (Bash)КомандаНужен sudoОбе команды показывают открытые сокеты, но не проверяют здоровье приложения.
sudo ss -lntp; sudo ss -xlpn
- Измените только проверенную причинуПри расхождении пути к Unix-сокету исправьте его после копии VirtualHost и конфигурации пула; при остановленном сервисе восстановите сервис и выясните причину падения. Не отключайте модули Apache без проверки зависимых сайтов и не повышайте ProxyTimeout для скрытия аварий.
- Дополнительная команда по темеLinux · Терминал (Bash)С осторожностьюНужен sudoDebian systemd пример; изменение модулей иногда требует полного restart по штатной процедуре.
sudo apache2ctl -t && sudo systemctl reload apache2Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
#Как проверить результат
Повторите несколько GET к затронутым URL; код 502 исчез, ответы содержат правильное содержимое, а Apache error_log и журнал backend перестали фиксировать соединения с ошибками. Проверьте соседние URL и сайты.
#Если проблема не устранена
Если 502 остаётся только под нагрузкой, исследуйте исчерпание процессов FPM, очереди backend и сбросы соединений. Если 502 возвращает внешний Nginx, ищите ошибку на соответствующей границе прокси.