Nginx обрабатывает каждый HTTP-запрос, проводя его через 11 фаз. Понимание этого порядка — ключ к предсказуемой конфигурации:
# Фазы обработки запроса в Nginx (в порядке выполнения)
1. NGX_HTTP_POST_READ_PHASE
→ Модуль: ngx_http_realip_module
→ Задача: Определение реального IP клиента (real_ip_header)
2. NGX_HTTP_SERVER_REWRITE_PHASE
→ Модуль: ngx_http_rewrite_module
→ Задача: Rewrite/return в блоке server (до выбора location)
3. NGX_HTTP_FIND_CONFIG_PHASE
→ Внутренняя фаза: Выбор подходящего location
→ Здесь работает алгоритм сопоставления location
4. NGX_HTTP_REWRITE_PHASE
→ Модуль: ngx_http_rewrite_module
→ Задача: Rewrite/return внутри выбранного location
5. NGX_HTTP_POST_REWRITE_PHASE
→ Внутренняя: Перезапуск поиска location после rewrite
6. NGX_HTTP_PREACCESS_PHASE
→ Модули: limit_req, limit_conn
→ Задача: Rate limiting и ограничение соединений
7. NGX_HTTP_ACCESS_PHASE
→ Модули: access, auth_basic, auth_request
→ Задача: Авторизация и контроль доступа
8. NGX_HTTP_POST_ACCESS_PHASE
→ Внутренняя: Обработка результата satisfy
9. NGX_HTTP_PRECONTENT_PHASE
→ Модули: try_files, mirror
→ Задача: Проверка существования файлов
10. NGX_HTTP_CONTENT_PHASE
→ Модули: proxy_pass, fastcgi_pass, static, index
→ Задача: Генерация ответа
11. NGX_HTTP_LOG_PHASE
→ Модуль: ngx_http_log_module
→ Задача: Запись в лог
Практическое следствие: limit_req (фаза 6) всегда выполняется до auth_basic (фаза 7). Нельзя сделать rate limiting только для неавторизованных запросов через стандартные директивы — нужен auth_request или Lua.
Оставить комментарий