Как по‑человечески тестировать конфиг Nginx (и не словить боль)
Привет, %username%! Когда Nginx живёт в проде годами, конфиг обрастает правилами, хаками и «быстрыми решениями». В какой‑то момент править это страшно: тронешь одну строчку — отвалится половина роутинга. Автор статьи с Хабра предлагает здравый подход: сначала зафиксировать поведение тестами, потом уже упрощать.
Краткое описание подходов из статьи "Как тестировать конфигурацию Nginx: корректность и информационная безопасность".
1. Ручное тестирование
Правки конфига → nginx -t → перезапуск → cURL’ами по роутам. Плюс — быстро начать, минус — плохо масштабируется и легко что‑то забыть. Полезные штуки: nginx -t и rewrite_log on для дебага.
2. nginx-location-match-finder (Python)
Утилита показывает, какой location сработает для URI. Удобно, когда конфиг разросся и логика неочевидна. Но инструмент старый, свежие версии Nginx не поддерживает — скорее вспомогательный дебаг, а не основное тестирование.
3. Test::Nginx (Perl)
Нативный фреймворк под Nginx: в тесте описываешь мини‑конфиг, поднимаешь nginx на порту, шлёшь HTTP‑запросы и проверяешь статус, заголовки, тело, логи. Мощный DSL, отлично подходит для CI. Но: нужен Perl, nginx в окружении или Docker, плюс ещё одна технология в стеке.
4. Nginx в Docker + эхо‑сервер + TestContainers
Идея: – упаковать Nginx c боевой конфигурацией в Docker; – рядом запустить простой эхо‑сервер; – писать тесты на любом языке (pytest, JUnit, Go test и т.д.), гонять реальные HTTP‑запросы и проверять, что переписывания и заголовки такие, как нужно.
Плюсы — тесты максимально приближены к продовой сборке и хорошо живут в CI. Минус — нужно самому «собрать» мини‑фреймворк вокруг этого подхода.
5. Gixy для ИБ
Статический анализатор nginx‑конфигов: ищет проблемы с alias, try_files, небезопасные регексы, SSRF, HTTP Splitting, лишнюю выдачу версии Nginx и прочие ловушки. Оригинальный проект заброшен, но живёт форк с релизами 2025 года. Отлично дополняет функциональные тесты проверками безопасности.
Выводы из статьи:
- Для разовой диагностики подойдут ручное тестирование и nginx-location-match-finder.
- Для системных проверок — Test::Nginx (если ок с Perl) или подход с Docker+эхо‑сервером и TestContainers на любимом ЯП.
- Для безопасности — обязательно включать Gixy в пайплайн.
А ты как тестируешь свои nginx‑конфиги сейчас — руками, curl’ом, юнит‑тестами, чем‑то ещё? Используешь ли Test::Nginx или предпочитаешь подход через Docker и эхо‑сервисы? Есть ли у тебя в CI шаги по статическому анализу Nginx (Gixy или аналоги) или пока до этого «не дошли руки»?
Делись опытом и граблями в комментариях — особенно интересны боевые кейсы с переписыванием роутов и безопасностью.