Добавить в корзинуПозвонить
Найти в Дзене

Nginx: 4 линтера и что они находят

Команда nginx -t — первый инструмент каждого администратора. Она проверяет синтаксис конфигурации: правильность скобок, точек с запятой, допустимость имён директив. Но на этом её возможности заканчиваются. Ошибки безопасности, устаревшие протоколы и опасные практики она не видит в упор. Что упускает nginx -t nginx -t — встроенная проверка синтаксиса. Написана на C, работает мгновенно, но видит только структурные ошибки. Безопасность не проверяет, автофикса нет. Gixy — статический анализатор от Яндекса. Около 7 правил безопасности: HTTP Request Splitting, подделка запросов, переопределение заголовков, проблемы с псевдонимами и небезопасный if. Проект заброшен. nginx-linter — написан на Node.js, около 8 правил. Поддержка редкая, активной разработки нет. nginx-lint — современный линтер на Rust. 680 коммитов, 15 релизов, актуальная версия 0.10.0. Более 30 правил, автоматическое исправление ошибок, браузерный интерфейс на WebAssembly и нативная поддержка CI/CD. Единственный с активной раз
Оглавление

Команда nginx -t — первый инструмент каждого администратора. Она проверяет синтаксис конфигурации: правильность скобок, точек с запятой, допустимость имён директив. Но на этом её возможности заканчиваются. Ошибки безопасности, устаревшие протоколы и опасные практики она не видит в упор.

Что упускает nginx -t

nginx -t — встроенная проверка синтаксиса. Написана на C, работает мгновенно, но видит только структурные ошибки. Безопасность не проверяет, автофикса нет.

Gixy — статический анализатор от Яндекса. Около 7 правил безопасности: HTTP Request Splitting, подделка запросов, переопределение заголовков, проблемы с псевдонимами и небезопасный if. Проект заброшен.

nginx-linter — написан на Node.js, около 8 правил. Поддержка редкая, активной разработки нет.

nginx-lint — современный линтер на Rust. 680 коммитов, 15 релизов, актуальная версия 0.10.0. Более 30 правил, автоматическое исправление ошибок, браузерный интерфейс на WebAssembly и нативная поддержка CI/CD. Единственный с активной разработкой.

Как работает nginx-lint

Инструмент устанавливается двумя способами: сборкой из исходного кода через менеджер пакетов Rust или запуском через Docker-образ ghcr.io/walf443/nginx-lint:latest.

Рекомендованный порядок работы с конфигурацией: 1) nginx -t — базовая проверка синтаксиса; 2) nginx-lint /etc/nginx/nginx.conf — аудит безопасности и практик; 3) Исправить найденные проблемы; 4) nginx -t повторно — убедиться, что правки не сломали синтаксис; 5) nginx -s reload — применить конфигурацию.

Настройка хранится в файле .nginx-lint.toml. Здесь можно указать допустимые протоколы, включить или отключить отдельные правила, задать стиль отступов и добавить поддержку сторонних модулей: RTMP, Lua, Brotli.

Если какое-то предупреждение неактуально — его можно подавить прямо в файле конфигурации комментарием с указанием правила и причины. Команда nginx-lint why с именем правила выдаёт подробное объяснение с примерами.

Что находит линтер на практике

В реальных конфигурациях nginx-lint стабильно обнаруживает несколько типов проблем.

server-tokens on раскрывает версию Nginx в HTTP-заголовках. Атакующий получает точную версию и может искать для неё известные уязвимости. Одна строка в конфиге — и сервер перестаёт сообщать лишнее.

autoindex on включает листинг директорий. Если директива стоит на уровне виртуального сервера, посетитель видит структуру файловой системы там, где не должен.

Псевдоним без завершающего слэша — классическая ошибка обхода директорий. Запрос вида /static../etc/passwd позволяет выйти за пределы разрешённого пути.

Переопределение заголовков через add_header внутри блока location полностью заменяет все заголовки уровня server. Заголовки X-Frame-Options или Content-Security-Policy, заданные выше, просто исчезают.

Автофикс через флаг --fix работает для большинства правил. Там, где автоматическое исправление невозможно без понимания контекста, линтер сообщает об этом явно.

Для кого это актуально

Быстрая разовая проверка — достаточно nginx -t и nginx-lint. Два шага, пять минут, базовый аудит готов.

Полный аудит безопасности — nginx-lint плюс Gixy. Они дополняют друг друга: Gixy сосредоточен на специфических атаках уровня HTTP, nginx-lint охватывает более широкий набор правил и практик.

Конвейер сборки и проверки кода — только nginx-lint имеет нативную поддержку GitHub Actions и Docker-образ для GitLab CI. Форматы вывода: аннотации для GitHub и структурированный JSON.

Работа без установки — nginx-lint предлагает браузерный интерфейс на основе WebAssembly. Достаточно запустить команду nginx-lint web --open и проверить конфигурацию в браузере с подсветкой проблем.

Небольшой команде с одним сервером хватит nginx -t и периодической проверки через nginx-lint. Команде из нескольких администраторов имеет смысл встроить nginx-lint в процесс проверки кода — это исключает класс ошибок, которые иначе обнаруживаются уже на рабочем сервере.

В IT For Prof мы используем подобный подход при администрировании серверов клиентов. Автоматическая проверка конфигурации снимает целый класс рисков до того, как изменения попадают на рабочий сервер.