Гайд по NGINX для новичков: от статики до балансировки нагрузки

freeCodeCamp.org 553 тыс. 51 мин 4 мин 12.01.2024
Главное

Сетевая архитектура современных веб-приложений редко обходится без промежуточных звеньев между пользователем и сервером. В этом видеоуроке старший разработчик Ла Харб (La Harb) подробно разбирает NGINX — мощный инструмент, ставший стандартом индустрии для балансировки нагрузки, кэширования и обеспечения безопасности.

🧱 Что такое NGINX и каковы его основные функции 0:27

На примере сервиса Airbnb Ла Харб демонстрирует, что браузер при загрузке страницы получает огромное количество контента: изображения, скрипты, текстовые данные . Инструменты разработчика показывают, что в поле Server у многих запросов указан именно NGINX. Хотя его часто называют веб-сервером, технически это программное обеспечение выполняет гораздо более широкий спектр задач .

Ла Харб выделяет три ключевых сценария использования:

  1. Обратный прокси (Reverse Proxy): NGINX выступает посредником. Клиент отправляет запрос не напрямую к серверу приложения, а к NGINX, который передает его дальше, получает ответ и возвращает его пользователю .
  2. Балансировщик нагрузки (Load Balancer): Если у приложения миллионы пользователей, один сервер не справится с трафиком. NGINX распределяет входящие запросы между несколькими серверами (например, в облаке AWS), предотвращая перегрузку отдельных узлов .
  3. Шифрование и SSL-терминация: Вместо того чтобы настраивать HTTPS на каждом отдельном сервере приложения, можно возложить задачу дешифрования трафика на NGINX, упрощая инфраструктуру .

⚙️ Установка и базовая конфигурация 8:13

Для пользователей macOS установка производится крайне просто через пакетный менеджер Homebrew командой brew install nginx . Основные файлы конфигурации располагаются в директории /usr/local/etc/nginx (или аналогичной, в зависимости от ОС).

Главным файлом является nginx.conf. Ведущий предлагает очистить его содержимое, чтобы понять структуру с нуля. Конфигурация NGINX строится на двух понятиях :

📄 Обслуживание статического контента и MIME-типы 13:11

Одной из базовых задач NGINX является отдача статических файлов (HTML, CSS, изображения). Для этого в контексте http создается блок server, где указываются две критически важные директивы:

Проблема MIME-типов

При первом подключении CSS-стилей Ла Харб сталкивается с проблемой: стили не применяются, хотя файл успешно передается . Причина кроется в заголовке Content-Type. Если NGINX не знает тип файла, он может отдавать CSS как обычный текст (text/plain), что игнорируется браузером .

Решение заключается в использовании директивы include mime.types; внутри контекста http . Это подключает стандартную таблицу соответствий расширений файлов и их типов, корректно обрабатывая всё: от изображений до шрифтов.

📍 Работа с контекстом Location 22:45

Блок location позволяет гибко настраивать поведение сервера в зависимости от URL-пути. Например, при обращении к /fruits можно отдавать контент из специфической папки.

Ла Харб объясняет разницу между root и alias:

Директива try_files и регулярные выражения

Если в папке нет файла index.html (например, он называется veggies.html), используется директива try_files . Она позволяет перечислить последовательность файлов, которые сервер должен попытаться найти, прежде чем выдать ошибку 404. Также location поддерживает регулярные выражения (символ ~*), что позволяет создавать сложные правила, например, перенаправлять все запросы вида /count/[0-9] на главную страницу .

🔄 Редиректы и Rewrite (перезапись адресов) 33:44

Ведущий демонстрирует два способа перенаправить пользователя:

  1. Redirect (307 Temporary Redirect): Информирует браузер, что страница временно находится по другому адресу. При запросе /crops пользователь видит в адресной строке изменение на /fruits .
  2. Rewrite: Происходит на стороне сервера. Пользователь запрашивает /number/3, в строке браузера адрес остается прежним, но NGINX «за кулисами» заменяет этот запрос на другой (например, /count/3) и отдает соответствующий контент .

⚖️ Настройка Load Balancer с помощью Docker 37:39

В финальной и наиболее продвинутой части курса Ла Харб показывает, как превратить NGINX в балансировщик нагрузки . Для имитации реальной среды используются Docker-контейнеры.

Ведущий создает простое Express-приложение на Node.js и запускает четыре идентичных контейнера на разных портах (1111, 2222, 3333, 4444) .

Для настройки балансировки используется блок upstream:

По умолчанию NGINX использует алгоритм Round Robin, распределяя запросы по очереди: первый запрос — на первый сервер, второй — на второй и так далее . Это позволяет масштабировать приложение горизонтально, просто добавляя новые серверы в список upstream.

💬 Цитаты

«NGINX — это сервер, который будет доставлять веб-контент в наш браузер.»

«Если у вас много трафика, вам нужно как-то увеличить количество серверов. И вот здесь на сцену выходит NGINX.»

👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
Reverse Proxy
Тип прокси-сервера, который ретранслирует запросы клиентов из внешней сети на один или несколько серверов во внутренней сети.
Load Balancer
Устройство или ПО, которое распределяет сетевой трафик между несколькими серверами для оптимизации использования ресурсов.
MIME-типы
Стандарт, описывающий типы данных (текст, видео, изображения), передаваемых по протоколу HTTP.
Round Robin
Алгоритм распределения нагрузки, при котором запросы передаются серверам по циклическому кругу.
📊 Цифры
🗓 Хронология
  1. 00:00 Введение в теорию: что такое NGINX и обратный прокси.
  2. 08:13 Установка NGINX и первый запуск на локальной машине.
  3. 13:11 Настройка обслуживания статических HTML-файлов.
  4. 22:45 Изучение контекста location, директив root и alias.
  5. 37:39 Развертывание кластера из 4-х серверов в Docker и настройка балансировщика.
⚖️ Другая сторона
Технологии и IT NGINX Load Balancing Reverse Proxy Docker Web Server