Вы открываете браузер, вводите адрес сайта, нажимаете 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 — и всё работает.

Работает, но только у вас на компьютере. Никто другой эту страницу не увидит. Чтобы сайт был доступен из интернета, нужна программа, которая:

  1. Слушает сетевой порт (обычно 80 для HTTP, 443 для HTTPS).

  2. Принимает входящие подключения от браузеров.

  3. Понимает, какой файл запрашивают.

  4. Находит этот файл на диске и отправляет в ответ.

Это и есть веб-сервер. 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% всех сайтов.

Обсуждение урока

0
Комментарии видны всем. Чтобы участвовать в обсуждении, войдите или зарегистрируйтесь.
Модерация сообщества

Пожаловаться на комментарий

Расскажите модераторам, что именно требует внимания.