Как вы подходите к анализу и тестированию ошибки HTTP 502 Bad Gateway?

«Как вы подходите к анализу и тестированию ошибки HTTP 502 Bad Gateway?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ошибка 502 Bad Gateway указывает, что сервер (шлюз или прокси) получил невалидный ответ от вышестоящего сервера. Мой подход к работе с ней включает:

1. Локализацию источника:

  • Проверка, является ли ошибка клиент-специфичной или воспроизводится повсеместно.
  • Анализ логов прокси-сервера (Nginx/Apache) и upstream-сервисов на предмет таймаутов или crashes.

2. Проверку инфраструктуры:

  • Таймауты: Соответствуют ли proxy_read_timeout, proxy_connect_timeout в Nginx ожидаемому времени ответа бэкенда?
  • Здоровье upstream: Работает ли балансировщик нагрузки (upstream в Nginx) корректно, маркирует ли нерабочие ноды?
  • Ресурсы: Не исчерпана ли память или CPU на сервере приложения/БД?

3. Тестирование отказоустойчивости:

  • Написание тестов, которые проверяют, как клиентское приложение обрабатывает 502 (retry, graceful degradation).
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

# Настройка стратегии повторных попыток для 5xx ошибок
retry_strategy = Retry(
    total=3,
    backoff_factor=1,
    status_forcelist=[502, 503, 504]
)
adapter = HTTPAdapter(max_retries=retry_strategy)

session = requests.Session()
session.mount("https://", adapter)

# Этот запрос автоматически выполнит ретрай при 502
response = session.get("https://api.example.com/endpoint")

Ключевой вывод: 502 — это симптом проблемы между серверами. Тестирование должно быть направлено на устойчивость системы к сбоям upstream-сервисов.