Перейти к содержанию
Innovialabs

Что такое Nginx и как он работает как веб-сервер

Основы3 мин

Коротко

Nginx — быстрый веб-сервер с событийной архитектурой, который отдаёт статические файлы и работает как обратный прокси, балансировщик нагрузки и кэш перед вашим приложением.

Коротко о Nginx

Nginx (произносится «энджин-икс») — программа, которая принимает HTTP-запросы от браузеров и отвечает на них. Она может сама отдать файл с диска или передать запрос вашему приложению на Node.js, Python, PHP, Go и получить ответ.

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

Событийная архитектура

Классические серверы часто выделяли отдельный процесс или поток на каждое соединение. Тысяча медленных клиентов — тысяча потоков, каждый со своей памятью.

Nginx устроен иначе:

  • Есть master-процесс: читает конфиг, запускает и перезапускает рабочие процессы.
  • Есть несколько worker-процессов, обычно по числу ядер CPU.
  • Каждый worker обслуживает тысячи соединений одновременно в цикле событий. Он не ждёт, пока клиент медленно скачает ответ, а переключается на другие готовые соединения.

Поэтому Nginx хорошо держит много одновременных подключений, в том числе медленных мобильных клиентов, без резкого роста потребления памяти.

Роли Nginx

Веб-сервер для статики

Отдаёт HTML, CSS, JavaScript, картинки и шрифты прямо с диска. Это его самая сильная сторона.

Обратный прокси (reverse proxy)

Стоит перед приложением и пересылает ему запросы. Попутно Nginx может:

  • завершать HTTPS (TLS-терминация), чтобы приложение работало по простому HTTP;
  • сжимать ответы (gzip);
  • ограничивать частоту запросов и размер тела;
  • скрывать внутреннюю структуру инфраструктуры.

Балансировщик нагрузки

Распределяет запросы между несколькими копиями приложения. Поддерживает разные методы: по кругу (round robin), по наименьшему числу соединений, по IP клиента.

Кэш

Сохраняет ответы приложения и отдаёт их повторно без обращения к бэкенду. Это снижает нагрузку на приложение и ускоряет ответы.

Структура базового nginx.conf

Конфиг состоит из директив и блоков (контекстов). Пример минимальной конфигурации сайта с проксированием API:

worker_processes auto;

events {
    worker_connections 1024;
}

http {
    include       mime.types;
    sendfile      on;
    gzip          on;

    upstream app {
        server 127.0.0.1:3000;
        server 127.0.0.1:3001;
    }

    server {
        listen 80;
        server_name example.com;

        root /var/www/site;

        location / {
            try_files $uri $uri/ /index.html;
        }

        location /api/ {
            proxy_pass http://app;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

Что здесь важно:

  • events — настройки обработки соединений.
  • http — всё, что касается HTTP: типы файлов, сжатие, сайты.
  • upstream — группа бэкендов для балансировки.
  • server — виртуальный хост: какой домен и порт он обслуживает.
  • location — правила для конкретных путей URL.

В реальных системах сайты обычно выносят в отдельные файлы в conf.d/ или sites-enabled/ и подключают через include.

Полезные команды

sudo nginx -t                 # проверить конфиг на ошибки
sudo systemctl reload nginx   # применить изменения без разрыва соединений
sudo tail -f /var/log/nginx/error.log

Частые ошибки

  • Перезапускать Nginx (restart) вместо reload и не проверять конфиг через nginx -t.
  • Забывать передавать заголовки Host и X-Real-IP — приложение видит неверный домен и IP.
  • Путать поведение proxy_pass со слешем в конце адреса и без него.
  • Оставлять открытыми служебные пути и листинг директорий.

Частые вопросы

Нет. Nginx не выполняет код вашего приложения. Он стоит перед ним: отдаёт статику, обрабатывает HTTPS и передаёт динамические запросы процессу на Node.js, Python или PHP-FPM.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.