Сетевая архитектура современных веб-приложений редко обходится без промежуточных звеньев между пользователем и сервером. В этом видеоуроке старший разработчик Ла Харб (La Harb) подробно разбирает NGINX — мощный инструмент, ставший стандартом индустрии для балансировки нагрузки, кэширования и обеспечения безопасности.
🧱 Что такое NGINX и каковы его основные функции 0:27
На примере сервиса Airbnb Ла Харб демонстрирует, что браузер при загрузке страницы получает огромное количество контента: изображения, скрипты, текстовые данные . Инструменты разработчика показывают, что в поле Server у многих запросов указан именно NGINX. Хотя его часто называют веб-сервером, технически это программное обеспечение выполняет гораздо более широкий спектр задач .
Ла Харб выделяет три ключевых сценария использования:
- Обратный прокси (Reverse Proxy): NGINX выступает посредником. Клиент отправляет запрос не напрямую к серверу приложения, а к NGINX, который передает его дальше, получает ответ и возвращает его пользователю .
- Балансировщик нагрузки (Load Balancer): Если у приложения миллионы пользователей, один сервер не справится с трафиком. NGINX распределяет входящие запросы между несколькими серверами (например, в облаке AWS), предотвращая перегрузку отдельных узлов .
- Шифрование и SSL-терминация: Вместо того чтобы настраивать HTTPS на каждом отдельном сервере приложения, можно возложить задачу дешифрования трафика на NGINX, упрощая инфраструктуру .
⚙️ Установка и базовая конфигурация 8:13
Для пользователей macOS установка производится крайне просто через пакетный менеджер Homebrew командой brew install nginx . Основные файлы конфигурации располагаются в директории /usr/local/etc/nginx (или аналогичной, в зависимости от ОС).
Главным файлом является nginx.conf. Ведущий предлагает очистить его содержимое, чтобы понять структуру с нуля. Конфигурация NGINX строится на двух понятиях :
- Директивы (Directives): Пары «ключ-значение» (например,
worker_processes 1;), которые задают конкретные параметры. - Контексты (Contexts): Блоки кода, ограниченные фигурными скобками (например,
http {}илиserver {}), внутри которых группируются связанные директивы .
📄 Обслуживание статического контента и MIME-типы 13:11
Одной из базовых задач NGINX является отдача статических файлов (HTML, CSS, изображения). Для этого в контексте http создается блок server, где указываются две критически важные директивы:
listen 8080;— порт, на котором будет работать сервер .root /путь/к/файлам;— директория на диске, где лежит ваш сайт .
Проблема MIME-типов
При первом подключении CSS-стилей Ла Харб сталкивается с проблемой: стили не применяются, хотя файл успешно передается . Причина кроется в заголовке Content-Type. Если NGINX не знает тип файла, он может отдавать CSS как обычный текст (text/plain), что игнорируется браузером .
Решение заключается в использовании директивы include mime.types; внутри контекста http . Это подключает стандартную таблицу соответствий расширений файлов и их типов, корректно обрабатывая всё: от изображений до шрифтов.
📍 Работа с контекстом Location 22:45
Блок location позволяет гибко настраивать поведение сервера в зависимости от URL-пути. Например, при обращении к /fruits можно отдавать контент из специфической папки.
Ла Харб объясняет разницу между root и alias:
- Root добавляет путь из
locationк основному пути на диске. Если запрошено/fruits, NGINX будет искать папку.../mysite/fruits. - Alias полностью подменяет путь. Это полезно, если вы хотите, чтобы по ссылке
/carbsотдавался контент из папкиfruitsбез её переименования .
Директива try_files и регулярные выражения
Если в папке нет файла index.html (например, он называется veggies.html), используется директива try_files . Она позволяет перечислить последовательность файлов, которые сервер должен попытаться найти, прежде чем выдать ошибку 404. Также location поддерживает регулярные выражения (символ ~*), что позволяет создавать сложные правила, например, перенаправлять все запросы вида /count/[0-9] на главную страницу .
🔄 Редиректы и Rewrite (перезапись адресов) 33:44
Ведущий демонстрирует два способа перенаправить пользователя:
- Redirect (307 Temporary Redirect): Информирует браузер, что страница временно находится по другому адресу. При запросе
/cropsпользователь видит в адресной строке изменение на/fruits. - Rewrite: Происходит на стороне сервера. Пользователь запрашивает
/number/3, в строке браузера адрес остается прежним, но NGINX «за кулисами» заменяет этот запрос на другой (например,/count/3) и отдает соответствующий контент .
⚖️ Настройка Load Balancer с помощью Docker 37:39
В финальной и наиболее продвинутой части курса Ла Харб показывает, как превратить NGINX в балансировщик нагрузки . Для имитации реальной среды используются Docker-контейнеры.
Ведущий создает простое Express-приложение на Node.js и запускает четыре идентичных контейнера на разных портах (1111, 2222, 3333, 4444) .
Для настройки балансировки используется блок upstream:
- Создается контекст
upstream backend_server, где перечисляются адреса всех четырех запущенных инстансов . - В основном блоке
serverчерез директивуproxy_pass http://backend_server;NGINX перенаправляет входящий трафик на эти сервера .
По умолчанию NGINX использует алгоритм Round Robin, распределяя запросы по очереди: первый запрос — на первый сервер, второй — на второй и так далее . Это позволяет масштабировать приложение горизонтально, просто добавляя новые серверы в список upstream.