Nginx: stub_status module: access denied — Настройка Prometheus / Zabbix
Система мониторинга (Prometheus Nginx Exporter, Zabbix Agent, Datadog, Telegraf) не может собрать метрики производительности веб-сервера, получая ошибку 403 Forbidden. В логе error.log регистрируется блокировка доступа к служебному location: access forbidden by rule, client: 10.0.5.120, server: localhost, request: "GET /nginx_status HTTP/1.1".
| Элемент конфигурации | Текущее состояние | Требуемое действие |
|---|---|---|
stub_status; | Активирован в location /basic_status | Модуль встроен и готов отдавать метрики |
Директива allow | Разрешен только 127.0.0.1 | IP-адрес агента мониторинга отсутствует в белом списке |
Директива deny all; | Блокирует неавторизованные IP | Срабатывает ограничение модуля доступа |
- Дашборды мониторинга отображают отсутствие данных (No Data / Down) по активным соединениям и RPS веб-сервера.
- Прямой опрос с локалхоста через
curl http://127.0.0.1/nginx_statusможет работать, но сетевой опрос с сервера метрик блокируется.
- Найдите конфигурационный файл с объявлением эндпоинта метрик:
grep -rn "stub_status" /etc/nginx/ - Добавьте IP-адрес вашего сервера сбора метрик (Prometheus/Zabbix) или локальную подсеть мониторинга перед правилом
deny all;:location /nginx_status { stub_status on; access_log off; # Разрешенные доверенные адреса: allow 127.0.0.1; allow ::1; allow 10.0.0.0/8; # Внутренняя VPC подсеть allow 192.168.1.50; # IP сервера Prometheus # Запретить доступ всем остальным: deny all; } - Если сбор метрик вынесен на отдельный внутренний сервисный порт (Best Practice):
server { listen 127.0.0.1:8080; listen 10.0.5.10:8080; server_name _; location /stub_status { stub_status; access_log off; allow 10.0.0.0/8; deny all; } } - Проверьте файл конфигурации и примените настройки:
sudo nginx -t sudo systemctl reload nginx - Проверьте получение метрик утилитой curl:
curl -s http://127.0.0.1:8080/stub_status
stub_status для публичного интернета (allow all;). Метрики отображают текущий объем трафика, число ожидающих запросов и паттерны активности, что помогает злоумышленникам координировать DDoS-атаки.Частые вопросы (FAQ)
Какие метрики отдает модуль stub_status?
Модуль возвращает 7 базовых счетчиков: Active connections (активные соединения), accepts (принятые), handled (обработанные), requests (всего запросов), Reading (чтение заголовков), Writing (отправка ответа) и Waiting (keep-alive соединения).
Как проверить, собран ли Nginx с поддержкой stub_status?
Выполните команду nginx -V 2>&1 | grep -o with-http_stub_status_module. Если строка присутствует, модуль скомпилирован и доступен.
В чем разница между accepts и handled?
Параметры могут различаться, если было достигнуто ресурсное ограничение (например, сработал worker_connections limit) — в этом случае часть принятых (accepts) соединений не была обработана (handled).
Почему access_log off рекомендуется для эндпоинта stub_status?
Агенты мониторинга опрашивают эндпоинт каждые несколько секунд, что приводит к быстрому разрастанию файлов access.log мусорными записями.