HTTP_502_BAD_GATEWAY
Linux / DevOps
Траблшутинг ошибки 502 Bad Gateway в Nginx: PHP-FPM, Node.js и Python
- Браузер возвращает HTTP-статус
502 Bad Gatewayпри обращении к сайту. - В
error.logNginx появляется записьconnect() to unix:/run/php/php-fpm.sock failed (111: Connection refused). - Ошибка
upstream prematurely closed connection while reading response header from upstream.
1. Анализ журнала ошибок Nginx
tail -n 50 /var/log/nginx/error.log2. Сценарий А: Ошибка прав unix-сокета PHP-FPM
Если в логе (13: Permission denied), проверьте владельца сокета в /etc/php/*/fpm/pool.d/www.conf:
listen.owner = www-data
listen.group = www-data
listen.mode = 0660systemctl restart php*-fpm3. Сценарий Б: Переполнение очереди бэкенда (Node.js / Python Gunicorn / Puma)
Если процесс падает по OOM или не успевает разгребать очередь, увеличьте буферы и таймауты проксирования в блоке location Nginx:
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Connection "";
# Увеличение таймаутов на обработку тяжелых запросов
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 120s;
# Буферизация заголовков апстрима
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
}4. Проверка доступности порта приложения
ss -tulpn | grep -E "(3000|8000|9000|php)"
curl -I http://127.0.0.1:3000
Практический опыт инженера:
Если бэкенд падает по segfault при генерации больших ответов, проверьте размер proxy_buffer_size: при превышении лимита Nginx закрывает соединение и пишет upstream sent too big header.
Частые вопросы (FAQ)
В чем разница между ошибками 502 Bad Gateway и 504 Gateway Timeout?
502 означает, что Nginx получил некорректный ответ (RST, сброс соединения, падение процесса) от бэкенда. 504 означает, что бэкенд жив, но не успел прислать ответ за время, установленное в proxy_read_timeout.
Почему PHP-FPM внезапно возвращает 502 при высокой нагрузке?
Исчерпан пул процессов (max_children reached). Увеличьте pm.max_children в пуле www.conf и параметр listen.backlog.