Ответ
В DevOps-инфраструктуре Nginx часто выступает как API Gateway или Ingress Controller. Вот как я проверяю его работу с upstreams.
1. Базовая проверка конфигурации
# Проверяем синтаксис конфига
nginx -t
# Если используем динамическую конфигурацию (Consul Template, Ansible), перезагружаем аккуратно
nginx -s reload
2. Проверка доступности upstreams Определяем upstream-блок в конфиге и проверяем его здоровье.
upstream backend {
server 10.0.1.10:8080 max_fails=3 fail_timeout=30s;
server 10.0.1.11:8080 max_fails=3 fail_timeout=30s;
server 10.0.1.12:8080 backup; # Резервный сервер
}
Проверяем статус через специальный endpoint, если включен модуль ngx_http_upstream_module:
curl http://nginx-host/upstream_status
3. Логирование для отладки Добавляем в конфиг Nginx кастомные заголовки и логи.
location /api/ {
proxy_pass http://backend;
# Добавляем заголовок с именем выбранного upstream-сервера
add_header X-Upstream $upstream_addr always;
# Логируем детали проксирования
access_log /var/log/nginx/upstream.log upstream_info;
}
log_format upstream_info '$remote_addr - $upstream_addr - $upstream_status - $request_time';
После чего проверяем:
tail -f /var/log/nginx/upstream.log
curl -I http://nginx-host/api/health | grep X-Upstream
4. Использование переменных для проверки балансировки Чтобы убедиться, что балансировка работает (например, round-robin), отправляем несколько запросов:
for i in {1..5}; do curl -s http://nginx-host/api/version | jq .host; done
5. Интеграция с Service Discovery Если upstreams динамические (Kubernetes, Consul), проверяем, что резолвинг работает:
# Для Kubernetes Ingress
kubectl get ingress -n production -o yaml | grep -A5 "backend:"
# Имитируем DNS-резолвинг, который делает Nginx
dig +short backend-service.namespace.svc.cluster.local
6. Проверка health checks
Убеждаемся, что Nginx правильно помечает нерабочие ноды. Можно временно остановить один из бэкендов и проверить логи на ошибки 502 или no live upstreams.
Итог: Комбинация проверки конфига, анализа логов, отправки тестовых запросов и мониторинга метрик (вроде nginx_plus_upstream_peer_responses в Prometheus) дает полную картину работы upstreams.