Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Apache Error: AH00898: Error reading from remote server returned by /proxy_url Linux / DevOps

Apache Error AH00898: Error reading from remote server — Фикс 502

Обновлено: 18.08.2026  ·  Официальная база знаний

При обращении через Apache к upstream-приложению (Node.js, Tomcat, Python Gunicorn, PHP-FPM) клиенты получают статус 502 Bad Gateway. В error.log фиксируется сетевой разрыв: [proxy:error] [pid 1234:tid 5678] (104)Connection reset by peer: [client ...] AH00898: Error reading from remote server returned by /api/v1/data.

СобытиеСущностьПричина ошибки
Connection reset by peerБэкенд-сервер (Upstream)Бэкенд упал по OOM, завершил процесс аварийно или сбросил TCP RST
Таймаут чтения ответаДиректива ProxyTimeoutБэкенд генерирует тяжелый отчет дольше установленного лимита
Превышение размера буфераProxyReceiveBufferSizeЗаголовки ответа бэкенда превысили допустимый лимит буфера Apache
  • Пользователи видят стандартную страницу «502 Proxy Error: The proxy server received an invalid response from an upstream server».
  • Запросы выполняются длительное время, после чего соединение принудительно разрывается.
  1. Увеличьте лимиты времени ожидания ответа бэкенда (ProxyTimeout) в конфигурации виртуального хоста:
    # Увеличиваем таймаут ожидания ответа до 120-300 секунд:
    ProxyTimeout 300
    
    <Location /api/>
        ProxyPass http://127.0.0.1:8000/api/ timeout=300
        ProxyPassReverse http://127.0.0.1:8000/api/
    </Location>
  2. Проверьте системные логи целевого бэкенда (Gunicorn, Node.js, Tomcat, PHP-FPM), чтобы выявить причину падения процесса во время обработки запроса:
    # Например, проверка службы Node.js бэкенда:
    sudo journalctl -u my-backend-app.service -n 50 --no-pager
  3. Если бэкенд возвращает объемные заголовки (большие Cookie, токены авторизации), увеличьте буферы чтения прокси:
    ProxyReceiveBufferSize 131072
    ProxyIOBufferSize 65536
  4. Если используется HTTP Keep-Alive к бэкенду, настройте пул соединений с параметрами переиспользования сокетов:
    ProxyPass http://127.0.0.1:8000/ retry=0 keepalive=On ttl=60
  5. Примените обновленную конфигурацию: sudo apache2ctl configtest && sudo systemctl reload apache2.
Критично для бэкенда: Ошибка Connection reset by peer на уровне TCP означает, что удаленный сервер отправил пакет RST. Это прямое свидетельство того, что процесс приложения на бэкенде аварийно упал (Segfault, Out of Memory, Uncaught Exception) прямо во время формирования ответа.
Практический опыт инженера: Если бэкенд написан на Python (Gunicorn/uWSGI), убедитесь, что `--timeout` в Gunicorn больше, чем `ProxyTimeout` в Apache, иначе Gunicorn убьет воркер раньше, чем Apache закроет сессию.

Частые вопросы (FAQ)

Чем AH00898 отличается от AH00957?

AH00957 возникает, когда Apache вообще не смог установить TCP-соединение с бэкендом (порт закрыт). AH00898 означает, что соединение было успешно установлено, но бэкенд разорвал связь в процессе передачи данных.

Что делает параметр retry=0 в директиве ProxyPass?

По умолчанию при сбое ноды Apache временно банит ее на 60 секунд. retry=0 отключает блокировку, заставляя Apache немедленно проверять доступность бэкенда при следующем запросе.

Может ли фаервол (iptables / AWS Security Group) вызывать AH00898?

Да, если stateful фаервол сбрасывает долгие неактивные TCP-соединения по своему внутреннему conntrack-таймауту.

Как увидеть подробный дамп обмена данными между Apache и бэкендом?

Включите директиву LogLevel proxy:trace5 в проблемном блоке VirtualHost.