Вы открываете браузер, вводите адрес сайта, нажимаете Enter — и через секунду видите страницу. Между вашим нажатием и появлением страницы произошло десятки вещей, но одна из ключевых — кто-то отдал вам эту страницу. Этот «кто-то» — веб-сервер. И в трети случаев этот веб-сервер — Nginx.
Netflix, Dropbox, WordPress.com, Airbnb — все они используют Nginx. Не потому что модно, а потому что он быстрый, лёгкий и умеет обрабатывать десятки тысяч одновременных подключений, не падая от нагрузки.
Два слова требуют пояснения. Веб-сервер — программа, которая принимает запросы по HTTP и отдаёт ответы. Вы просите страницу — она отдаёт. Не путайте с «сервером»: сервер — это компьютер (железо или виртуальная машина), а веб-сервер — программа, которая на нём работает. На одном сервере может быть установлено несколько веб-серверов, а может не быть ни одного. Reverse proxy — посредник между пользователем и приложением. Пользователь думает, что общается с Nginx, а Nginx тихо перенаправляет запрос вашему Python/Node/Go-приложению и возвращает ответ. Зачем этот посредник — разберём подробно в четвёртом блоке. Чтобы не учить Nginx на абстрактных примерах, мы будем строить реальный проект — постепенно, от урока к уроку. Знакомьтесь: DevPortfolio — персональный сайт разработчика.
К концу курса у вас будет полноценный сайт с такой архитектурой:
Пользователь
│
▼
Nginx ──── HTTPS, сжатие, кэш, защита
│
├── Статика: HTML, CSS, JS, картинки (отдаёт сам)
│
├── API: /api/contact → бэкенд на Python (проксирует)
│
└── Блог: blog.devportfolio.com → отдельный сервис (проксирует)
Nginx — центральная точка. Он принимает все запросы и решает, что с ними делать: отдать файл, перенаправить бэкенду или отклонить.
Сейчас DevPortfolio — одна HTML-страница. Вот она:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>DevPortfolio</title>
<style>
body { font-family: system-ui; max-width: 700px; margin: 50px auto; color: #333; }
h1 { color: #009639; }
.projects { display: grid; gap: 16px; }
.card { border: 1px solid #ddd; border-radius: 8px; padding: 16px; }
</style>
</head>
<body>
<h1>Привет, я Алексей</h1>
<p>Бэкенд-разработчик. Python, Docker, Linux.</p>
<h2>Проекты</h2>
<div class="projects">
<div class="card">
<strong>TaskMaster</strong>
<p>Менеджер задач на Python. CLI + Docker.</p>
</div>
<div class="card">
<strong>WeatherAPI</strong>
<p>REST API прогноза погоды. Flask + PostgreSQL.</p>
</div>
</div>
<h2>Контакты</h2>
<p>Email: alex@example.com | GitHub: github.com/alex</p>
</body>
</html>
Сохраните этот файл как index.html — он понадобится уже через пару уроков. На протяжении курса DevPortfolio будет расти: появится CSS-файл, картинки, форма обратной связи с API-бэкендом, блог на отдельном поддомене. Каждая новая тема Nginx — новая возможность для нашего сайта.
Окей, но зачем для одной HTML-страницы целый Nginx? Можно же открыть файл в браузере двойным кликом — file:///home/alex/index.html — и всё работает.
Работает, но только у вас на компьютере. Никто другой эту страницу не увидит. Чтобы сайт был доступен из интернета, нужна программа, которая:
Слушает сетевой порт (обычно 80 для HTTP, 443 для HTTPS).
Принимает входящие подключения от браузеров.
Понимает, какой файл запрашивают.
Находит этот файл на диске и отправляет в ответ.
Это и есть веб-сервер. Nginx делает ровно это — но делает невероятно эффективно.
Когда ваш DevPortfolio будет лежать на сервере с Nginx — любой человек с интернетом сможет набрать devportfolio.com и увидеть ваш сайт. Nginx примет запрос, найдёт index.html и отправит его браузеру. За миллисекунды.
Nginx — не единственный веб-сервер. Вот основные альтернативы и почему мы выбрали именно его:
Apache HTTP Server. Старейший веб-сервер, появился в 1995 году. Долгое время — стандарт. Мощный, с огромным количеством модулей. Но у Apache классическая модель: один процесс (или поток) на каждое соединение. При 10 000 одновременных подключений — 10 000 процессов. Память заканчивается, сервер тормозит.
Nginx. Создан в 2004 году Игорем Сысоевым — российским разработчиком, который работал в Rambler и столкнулся с проблемой: Apache не справлялся с нагрузкой. Nginx использует другую модель — событийную: один процесс обрабатывает тысячи соединений, переключаясь между ними по мере готовности данных. Результат: тысячи соединений при минимальном расходе памяти.
Caddy. Современный веб-сервер (2015). Главная фишка — автоматический HTTPS: сам получает и обновляет сертификаты. Конфигурация проще, чем у Nginx. Но Nginx гибче, быстрее и имеет значительно большую экосистему.
Что умеет Nginx помимо раздачи файлов:
- Reverse proxy — принимает запрос, передаёт бэкенду, возвращает ответ. DevPortfolio будет проксировать
/api/contactна Python-приложение. - Балансировка нагрузки — распределяет запросы между несколькими серверами. Если один упал — остальные продолжают работать.
- HTTPS — шифрование соединений. Бесплатные сертификаты Let's Encrypt + Nginx = HTTPS за 5 минут.
- Кэширование — запоминает ответы бэкенда и отдаёт их повторно, не дёргая приложение.
- Сжатие — gzip уменьшает размер ответа в 3–5 раз. Страницы грузятся быстрее.
- Защита — ограничение запросов (rate limiting), фильтрация, блокировка IP.
Всё это мы разберём и настроим для DevPortfolio — по одной теме за блок.
Nginx (энджинкс) — веб-сервер и reverse proxy. Принимает HTTP-запросы, отдаёт файлы или перенаправляет запросы бэкенду.
Веб-сервер нужен, чтобы сайт был доступен из интернета. Без него HTML-файл виден только на вашем компьютере.
DevPortfolio — наш сквозной проект: персональный сайт разработчика. Начинаем с одной HTML-страницы, постепенно добавляем CSS, API, блог, HTTPS, балансировку.
Nginx использует событийную модель — один процесс обслуживает тысячи соединений. Apache создаёт процесс на каждое соединение.
Возможности: раздача статики, reverse proxy, балансировка, HTTPS, кэширование, сжатие, защита. Nginx используют ~34% всех сайтов.