Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад

Как происходит маршрутизация запросов через Nginx?

Вопрос проверяет понимание процесса обработки HTTP-запросов веб-сервером Nginx, что необходимо для настройки и отладки веб-инфраструктуры.

Короткий ответ

Nginx обрабатывает запрос, анализируя его заголовки, в частности, имя хоста и URI. Сначала он выбирает подходящий server block (виртуальный хост) на основе имени хоста или IP-адреса. Затем внутри этого блока ищет наиболее специфичное совпадение location directive для URI запроса. В зависимости от конфигурации location, запрос может быть обработан статически (отдача файла) или проксирован (передан) на бэкенд-сервер. Nginx также применяет правила из других директив, например, для перезаписи URL или аутентификации.

Длинный ответ

Nginx — это высокопроизводительный веб-сервер и обратный прокси, который обрабатывает входящие HTTP-запросы по чёткому алгоритму, определённому в его конфигурационном файле (обычно nginx.conf). Понимание этого процесса критично для настройки виртуальных хостов, балансировки нагрузки и обеспечения безопасности.

Основные этапы маршрутизации

Когда Nginx получает HTTP-запрос, он проходит через следующие ключевые шаги:

  1. Выбор server блока: Nginx проверяет заголовок Host запроса и сравнивает его с директивой server_name в каждом блоке server, слушающем данный IP-адрес и порт. Выбирается первый подходящий блок или блок по умолчанию (помеченный default_server), если совпадения нет.
  2. Сопоставление location: Внутри выбранного server блока Nginx ищет блок location, который наилучшим образом соответствует URI запроса (например, /api/users). Сопоставление происходит по приоритету: точное совпадение (=), префиксные пути, регулярные выражения (с модификаторами ~ или ~*).
  3. Обработка запроса: Внутри найденного location определяются действия: отдача статического файла (директива root или alias), проксирование на бэкенд (proxy_pass), возврат кода ошибки или внутреннее перенаправление.

Пример конфигурации

Рассмотрим простой конфиг, который обслуживает статику для основного домена и проксирует API-запросы на Node.js приложение.

# Основной контекст http
http {
    # Блок server для example.com
    server {
        listen 80;
        server_name example.com www.example.com;

        # Корневая директория для статических файлов
        root /var/www/html;

        # Обработка главной страницы
        location / {
            index index.html;
        }

        # Проксирование всех запросов, начинающихся с /api
        location /api/ {
            # Переписываем URI, убирая /api префикс перед отправкой
            rewrite ^/api/(.*)$ /$1 break;
            proxy_pass http://localhost:3000;
            proxy_set_header Host $host;
        }

        # Обработка 404 ошибок
        error_page 404 /404.html;
    }

    # Блок server по умолчанию (catch-all)
    server {
        listen 80 default_server;
        return 444; # Закрывает соединение без ответа
    }
}

Где применяется

Маршрутизация Nginx используется для:

  • Хостинга нескольких сайтов (виртуальные хосты) на одном сервере.
  • Балансировки нагрузки между несколькими бэкенд-серверами.
  • Кэширования статического контента для ускорения отдачи.
  • Защиты бэкенда, скрывая его реальную структуру (обратный прокси).
  • Реализации перезаписи URL (URL rewriting) для SEO или реструктуризации API.

Вывод: Понимание маршрутизации Nginx необходимо для эффективной настройки веб-сервера, особенно при развёртывании сложных приложений с микросервисной архитектурой, где требуется грамотно направлять запросы к разным сервисам.

Уровень

  • Рейтинг:

    3

  • Сложность:

    5

Навыки

  • Networks

  • Linux

    Linux

Ключевые слова

#Nginx

#HTTP request

#server block

#location directive

#reverse proxy

Подпишись на Python Developer в телеграм