Ищете практическое руководство по Nginx, в котором рассказывается о реальной оптимизации производительности Nginx без лишней «воды»? Это руководство по лучшим практикам настройки Nginx в 2026 году охватывает все: от установки до продвинутых методов оптимизации Nginx. Независимо от того, будит ли вас алерт в 3 часа ночи из-за того, что сервер тормозит, или вы только начинаете свой путь, здесь вы найдете проверенные лучшие практики Nginx 2026, готовые конфиги (которые можно просто скопировать и вставить) и полное руководство по сайзингу Nginx для любого уровня трафика.

⚡ Краткий ответ:

  • Время настройки: 45 минут
  • Уровень навыков: Средний (копипаст, конфиги прилагаются)
  • Прирост производительности: ускорение времени ответа на 40-60%
  • Пропускная способность: Обработка 10 000+ запросов в секунду (req/s)
  • Стоимость: Бесплатно (open source)

Краткий обзор: Чему вы научитесь

  • Оптимизация рабочих процессов (Worker Process): Настройте worker processes для достижения максимальной пропускной способности и стабильной работы в условиях высокого трафика при минимальных затратах ресурсов.
  • Сжатие и пропускная способность: Внедрите лучшие практики сжатия Gzip, чтобы сократить потребление трафика в 2–5 раз и ускорить загрузку страниц.
  • Усиление безопасности SSL/TLS: Примените методы усиления безопасности SSL/TLS, чтобы получить оценку A+ на SSL Labs и надежно защитить ваш трафик.
  • Загрузка файлов и ограничение скорости: Оптимизируйте параметр client_max_body_size для загрузки файлов и внедрите стратегии ограничения скорости (rate limiting) и защиты от DDoS.
  • Мониторинг и траблшутинг: Освойте методы мониторинга и устранения неполадок, чтобы быстро находить и ликвидировать узкие места в производительности.

Оглавление

Что такое Nginx и зачем его использовать?

Nginx (произносится как «энджин-икс») — это мощный, универсальный веб-сервер, созданный для высокой производительности, эффективного использования ресурсов и исключительной масштабируемости. Используемый для веб-хостинга, обратного проксирования (reverse proxy), балансировки нагрузки и кэширования, Nginx превосходно справляется с высокими нагрузками при минимальной задержке (latency) и низком потреблении ресурсов. Такие компании, как Netflix и GitHub, доверяют Nginx свою инфраструктуру. Возможности Nginx помогают улучшить SEO-оптимизацию сайта, одновременно удовлетворяя требования к масштабируемости современных веб-сервисов.

Положение на рынке и производительность

Интересный факт: Nginx занимает 18,98% рынка (согласно опросу веб-серверов NetCraft за октябрь 2024 года), конкурируя с такими топовыми решениями, как Cloudflare, Apache и LiteSpeed. Его эффективность и универсальность делают его идеальным выбором для современной веб-инфраструктуры, требующей понимания основ Nginx для создания высокопроизводительных серверов с нуля.

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

Почему стоит выбрать Nginx для оптимизации производительности?

  • Когда вам нужно ускорить работу Nginx или применить стратегии быстрого старта по оптимизации Nginx.
  • Понимание правильных настроек Nginx и лучших практик конфигурирования Nginx имеет решающее значение.
  • В этом руководстве рассматриваются лучшие практики настройки сжатия Gzip в Nginx и продвинутые советы по безопасности Nginx.
  • Соответствие новейшим стандартам лучших практик ssl_prefer_server_ciphers в Nginx 2024/2026 года.

Nginx превосходно справляется с раздачей статики, обратным проксированием и балансировкой нагрузки, сводя к минимуму использование ресурсов. Вот как он выглядит в сравнении с другими веб-серверами:

Nginx в сравнении с другими веб-серверами: Сравнение производительности
Функция Nginx Apache Microsoft Google Cloudflare LiteSpeed
Доля рынка (Окт. 2024) 18.98% 17.86% 2.03% 10.12% 16.28% 6.23%
Производительность Высокая конкурентность, эффективен для статики Медленнее при высоких нагрузках, лучше для динамики Ограниченная масштабируемость Оптимизировано для Google Cloud Высокая производительность, особенно с кэшем Самый быстрый для динамики и статики
Потребление ресурсов Низкое Умеренное Более высокое Оптимизировано под минимум ресурсов Высокая эффективность Высокая эффективность (особенно для WP)
Балансировка нагрузки Да Ограниченно Ограниченно Да Да Да
Поддержка Reverse Proxy Да Да Ограниченно Да Да Да
Поддержка SSL/TLS Да (с интеграцией Certbot) Да Да Да Да Да
Кэширование Базовое кэширование, поддержка сторонних модулей Модульное, сложная настройка Ограниченно Да (кэширование CDN) Продвинутое, встроенное Продвинутое, интегрированное
Совместимость ОС Linux, Windows Linux, Windows Только Windows Google Cloud Кроссплатформенный Linux, Windows
Сложность настройки Средняя Средняя Простая Сложная Простая Простая
Основной сценарий Высоконагруженные сайты, статический контент Сайты любого размера, динамический контент Windows-инфраструктура Облачные приложения Безопасность и кэширование WordPress и скоростной хостинг

Шаг 1: Выбор лучшего VPS для Nginx

Виртуальный частный сервер (VPS) — это виртуальная машина, работающая как изолированная среда на физическом сервере, который принадлежит провайдеру облачного или веб-хостинга.

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

Ключевые факторы при выборе VPS

  • Объем трафика: Выбирайте VPS с достаточным запасом ресурсов с учетом роста трафика. Для сайтов с высокой посещаемостью рассматривайте серверы как минимум с 2 ГБ ОЗУ и 2 ядрами CPU для эффективной оптимизации Nginx.
  • Операционная система: Для оптимальной производительности Nginx используйте VPS на базе Linux (рекомендуется Ubuntu 20.04+ или Debian 11+).
  • Производительность и аптайм (Uptime): Ищите провайдеров, гарантирующих аптайм 99,9%+ и низкую задержку (latency) для вашей целевой аудитории.
  • Масштабируемость и контроль: Убедитесь, что VPS позволяет легко увеличивать ресурсы и предоставляет root-доступ для полного контроля над конфигурацией Nginx.
  • Бюджетные варианты:
    • Hostinger - примерно 40 USD в год + 1 бесплатный домен по промокоду HIPSERGEYPBG
    • Zomro - скидки от 15% до 40% по промокоду zomro_379593
    • Kamatera

Минимальные требования Nginx: Руководство по сайзингу сервера

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

  • RAM (ОЗУ): Минимум 512 МБ (для production рекомендуется от 1 ГБ)
  • CPU (Процессор): Минимум 1 ядро (2+ ядра для высокого трафика)
  • Хранилище: Минимум 10 ГБ (рекомендуется SSD для лучшей производительности)
  • Пропускная способность (Bandwidth): От 1 ТБ в месяц для сайтов со средним трафиком

Ниже приведено руководство по сайзингу Nginx, которое сопоставляет уровни трафика с конкретными характеристиками оборудования и значениями конфигурации. Используйте эту таблицу, чтобы выбрать подходящий VPS и задать начальные параметры рабочих процессов перед их детальным тюнингом.

Руководство по сайзингу Nginx по уровню трафика
Уровень трафика Запросов в сек (Req/s) RAM (ОЗУ) Ядра CPU worker_connections multi_accept
Небольшой блог / портфолио до 100 512MB 1 512 off
Корпоративный сайт / SaaS 100–1,000 2GB 2 1024 on
Высоконагруженное приложение 1,000–10,000 4–8GB 4 4096 on
Высокая нагрузка / CDN origin 10,000+ 16GB+ 8+ 8192 on

Эти цифры — лишь отправные точки для тюнинга производительности Nginx, а не окончательные значения. Всегда проводите нагрузочное тестирование с использованием реального трафика с помощью утилит ab или wrk и корректируйте настройки на основе фактических метрик статуса Nginx.

Шаг 2: Установка и базовая настройка Nginx

В этом разделе полностью описан процесс конфигурации nginx, от установки до базовой настройки. Следуйте этим лучшим практикам nginx шаг за шагом, чтобы запустить nginx на вашем сервере с оптимальными настройками nginx.

Установка Nginx на Ubuntu

Чтобы установить nginx на Ubuntu, используйте следующие команды для обновления списка пакетов и установки сервера:

Терминал / Консоль
sudo apt update
sudo apt install nginx

Понимание того, как использовать nginx, включает в себя освоение этих основных команд для помощи по nginx и мониторинга статуса nginx:

Проверить статус nginx:
sudo systemctl status nginx

Запустить nginx:
sudo systemctl start nginx

Остановить nginx:
sudo systemctl stop nginx

Перезапустить nginx:
sudo systemctl restart nginx

Перезагрузить nginx (без разрыва соединений):
sudo systemctl reload nginx

Включить автозапуск nginx при загрузке:
sudo systemctl enable nginx

Понимание конфигурационных файлов Nginx

Конфигурационный файл nginx обычно находится по пути /etc/nginx/nginx.conf. Именно здесь вы задаете глобальные настройки nginx, такие как рабочие процессы (workers), соединения, логирование и протоколы SSL для тюнинга производительности nginx и оптимизации nginx.

Лучшие практики Nginx SSL 2024-2026: Конфигурация TLS

Ниже приведен пример оптимизированного основного конфига nginx с подробными пояснениями. Эта конфигурация соответствует лучшим практикам конфигурации nginx и актуальным лучшим практикам nginx для обеспечения безопасности и производительности:

nginx.conf
events {
    worker_connections 1024;  # Макс. количество одновременных соединений на один рабочий процесс. Вы можете изменить это значение в зависимости от трафика.
    multi_accept on;  # Каждый воркер принимает все новые соединения сразу, а не по одному. Рекомендуется для тюнинга nginx под высокими нагрузками.
    }
    
http {
    sendfile on;  # Включает эффективную передачу файлов через копирование на уровне ядра. Оставьте включенным для раздачи статических файлов. Приложения Node.js за nginx также получают от этого пользу.
    tcp_nopush on;  # Оптимизирует TCP-пакеты для отправки больших файлов. Оставьте как есть, если нет особых требований.
    types_hash_max_size 2048;  # Ограничивает максимальный размер хэш-таблицы для MIME-типов. Обычно значения по умолчанию достаточно.
    include /etc/nginx/mime.types;  # Подключает файл конфигурации MIME-типов, который сопоставляет расширения файлов с MIME-типами. Оставьте как есть.
    default_type application/octet-stream;  # MIME-тип по умолчанию для файлов без определенного типа. Оставьте как есть, если не нужно что-то специфическое.
    
    # Настройки SSL
ssl_protocols TLSv1.2 TLSv1.3; # Принудительно использует современные протоколы TLS. Оставьте это для безопасности. ssl_prefer_server_ciphers on; # Гарантирует предпочтение серверных шифров для безопасных соединений. Оставьте как есть. ssl_session_cache shared:SSL:10m; # Включает кэширование SSL-сессий для повышения производительности при последующих подключениях. ssl_session_timeout 10m; # Устанавливает таймаут кэша сессий на 10 минут. Подходит для большинства случаев. ssl_ciphers 'HIGH:!aNULL:!MD5'; # Указывает надежные шифры для SSL/TLS. Оставьте как есть, если не требуется специфический набор. # Заголовки безопасности
add_header X-Content-Type-Options nosniff; # Предотвращает интерпретацию файлов браузерами как файлов с другим MIME-типом. Оставьте для безопасности. add_header X-Frame-Options DENY; # Запрещает отображение сайта во iframes. Оставьте для безопасности, если не нужно иное. add_header X-XSS-Protection "1; mode=block"; # Защищает от атак межсайтового скриптинга (XSS). Оставьте для безопасности. server_tokens off; # Скрывает информацию о версии Nginx. Оставьте как есть, чтобы не раскрывать детали о сервере. # Настройки логирования
access_log /var/log/nginx/access.log; # Определяет, куда записывать логи запросов. Оставьте, если не хотите изменить расположение. error_log /var/log/nginx/error.log; # Определяет, куда записывать сообщения об ошибках. Оставьте, если не хотите изменить расположение. # Настройки Gzip
gzip on; # Включает сжатие Gzip для лучшей производительности. Оставьте включенным для большинства сайтов, чтобы уменьшить объем данных. gzip_vary on; # Сообщает прокси-серверам, что ответ зависит от заголовка Accept-Encoding. gzip_proxied any; # Включает Gzip для всех проксируемых запросов. Оставьте как есть, если нет специфических требований. gzip_comp_level 6; # Задает уровень сжатия. Уровень 6 — это хороший баланс между скоростью и степенью сжатия. gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # Указывает типы файлов для сжатия. Настройте при необходимости в зависимости от контента вашего сайта. # Подключение конфигураций виртуальных хостов
include /etc/nginx/sites-enabled/*; # Подключает все конфигурации из папки sites-enabled. Оставьте включенным, если нет веских причин отключить это. }

Совет: Просто скопируйте и вставьте это в /etc/nginx/nginx.conf, чтобы получить оптимизированную базовую конфигурацию. (никакие модификации не требуются)

Шаг 3: Настройка файла Domain.com

Правильная настройка домена критически важна для производительности nginx. В этом разделе показано, как настроить виртуальные хосты (серверные блоки), следуя лучшим практикам конфигурации nginx и внедряя оптимизацию конфига nginx для production-сред.

Создание конфигурации нового домена

Чтобы создать новый файл domain.com для вашего домена в директории /etc/nginx/sites-available/ не открывая его напрямую, вы можете использовать следующую команду (замените domain.com на ваше доменное имя):
Например: KOLODYCH.com - это мое доменное имя.

Терминал / Консоль:
sudo touch /etc/nginx/sites-available/domain.com

Эта команда создаст пустой файл с именем domain.com в директории sites-available. После создания файла вы сможете отредактировать его при необходимости + создать символическую ссылку в папку sites-enabled с помощью следующей команды:

Терминал / Консоль:
sudo ln -s /etc/nginx/sites-available/domain.com /etc/nginx/sites-enabled/

Откройте ваш только что созданный файл domain.com в папке /etc/nginx/sites-available/ и настройте его с учетом лучших практик nginx для обеспечения безопасности и оптимизации производительности:

domain.com
# Перенаправление с IPv4 адреса на домен
server {
    listen 80;
    server_name 0.0.0.0;  # Ваш IPv4 адрес
    return 301 https://domain.com$request_uri;  # Перенаправление на ваш domain.com
}

# Перенаправление с IPv6 адреса на домен
server {
    listen [1:1:1:1:1:1:1:1]:80;  # Ваш IPv6 адрес
    return 301 https://domain.com$request_uri;  # Перенаправление на ваш domain.com
}

# Перенаправление с www на версию без www для HTTP-трафика
server {
    listen 80;
    server_name www.domain.com;  # Домен с www
    return 301 https://domain.com$request_uri;  # Перенаправление www на версию без www
}

# Основной серверный блок для вашего домена
server {
    listen 80;
    server_name domain.com;  # Ваше доменное имя
    return 301 https://domain.com$request_uri;  # Принудительный HTTPS
}

# Серверный блок для обработки HTTPS
server {
    listen 443 ssl http2;  # HTTPS + Включение HTTP/2 улучшает производительность за счет мультиплексирования нескольких запросов по одному соединению, снижая задержку и предлагая другие преимущества.
    server_name domain.com;  # Домен без www

    ssl_certificate /etc/ssl/certificate.crt;  # Ваш сертификат
    ssl_certificate_key /etc/ssl/private.key;   # Ваш приватный ключ
    ssl_trusted_certificate /etc/ssl/ca_bundle.crt;  # Ваш CA bundle

    root /var/www/domain.com;  # Корневая директория вашего сайта
index index.php index; # Убедитесь, что index.php включен # Обработка ошибок error_page 404 /404; # Пользовательская страница ошибки 404 location = /404 { root /var/www/domain.com; # Расположение страницы ошибки 404 internal; # Помечает как внутреннюю, чтобы пользователи не могли получить к ней прямой доступ } location ~ \.php$ { include snippets/fastcgi-php.conf; # Подключает сниппеты конфигурации PHP fastcgi_pass unix:/var/run/php/php-fpm.sock; # Передача PHP-запросов в PHP-FPM fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # Необходимо для правильной работы PHP include fastcgi_params; # Подключает стандартные параметры fastcgi } # Кэширование CSS, JS, картинок, шрифтов и HTML-файлов на 30 дней location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|webp|woff|woff2|ttf|eot|html)$ { expires 30d; add_header Cache-Control "public"; } # Опционально: Настройте размер загрузки файла клиентом, если необходимо client_max_body_size 10M; # Установка максимального размера загрузки в 10 МБ - следуя лучшим практикам загрузки файлов } # Серверный блок для обработки HTTPS для www server { listen 443 ssl; # HTTPS server_name www.domain.com; # Домен с www ssl_certificate /etc/ssl/certificate.crt; # Ваш сертификат ssl_certificate_key /etc/ssl/private.key; # Ваш приватный ключ ssl_trusted_certificate /etc/ssl/ca_bundle.crt; # Ваш CA bundle return 301 https://domain.com$request_uri; # Перенаправление www на версию без www }

ВАЖНО! Замените domain.com на ваше доменное имя (Например: kolodych.com, abc.org, petsof.net)

Замените 0.0.0.0 на ваш реальный IPv4 адрес. Вы можете узнать его с помощью команды ifconfig или ip a, либо посмотреть в деталях вашего сервера.

Замените или удалите 1:1:1:1:1:1:1:1 с вашим реальным IPv6 адресом (если применимо).

Настройка SSL сертификата

Получите SSL сертификаты от провайдера (например, ZeroSSL или Let's Encrypt). Загрузите их в папку /etc/ssl/. Следуя лучшим практикам nginx TLS 2024 и лучшей практике nginx ssl_prefer_server_ciphers 2024, убедитесь, что следующие пути указаны верно:

  • /etc/ssl/certificate.crt (SSL сертификат)
  • /etc/ssl/private.key (Приватный ключ)
  • /etc/ssl/ca_bundle.crt (CA Bundle)

Выполнив описанные выше шаги, вы сможете установить Nginx и настроить SSL, оптимизировав ваш сервер для производительности и безопасности с использованием принципов руководства по защите nginx.

Загрузите ваш index и другие ресурсы сайта в папку /var/www/your-domain.com

Тестирование и перезагрузка nginx

Проверьте конфигурацию Nginx на наличие синтаксических ошибок с помощью команд проверки nginx:

Проверка конфигурации
sudo nginx -t

Если ошибок нет, перезагрузите Nginx, чтобы применить изменения и ускорить nginx:

Перезагрузка Nginx
sudo systemctl reload nginx

Шаг 3*: Настройка лимитов загрузки файлов (client_max_body_size)

По умолчанию Nginx ограничивает загрузку файлов всего 1 МБ (в Шаге 3 - настройке файла domain.com уже установлено 10 МБ). Если это вызывает ошибки "413 Request Entity Too Large", когда пользователи пытаются загрузить изображения, документы или медиафайлы -> давайте исправим это сейчас:

Какое значение client_max_body_size лучшее?

Универсального ответа нет — идеальное значение client_max_body_size зависит от вашей задачи:

  • По умолчанию (1 МБ): Подходит для простых сайтов только с контактными формами
  • 5-10 МБ: Стандарт для блогов, бизнес-сайтов с загрузкой изображений
  • 20-50 МБ: E-commerce сайты, загрузка аватарок и профилей, системы документооборота
  • 100-500 МБ: Медиа-сайты, галереи в высоком разрешении, хранилища PDF-файлов
  • 1-2 ГБ: Видеоплатформы, сервисы обмена большими файлами, системы резервного копирования

Конфигурация согласно лучшим практикам:

Рекомендуемые настройки client_max_body_size
# Глобальное значение по умолчанию (консервативное)
http {
    client_max_body_size 10M;
    
    # Специфический location для загрузки файлов
    server {
        listen 80;
        server_name example.com;
        
        # Большинство страниц используют 10 МБ по умолчанию
        
        # API эндпоинт для загрузки файлов
        location /api/upload {
            client_max_body_size 100M;
        }
        
        # Админ-панель для управления медиа
        location /admin/media {
            client_max_body_size 500M;
        }
        
        # Эндпоинт для загрузки видео
        location /videos/upload {
            client_max_body_size 2G;
        }
    }
    # Или используйте отдельные блоки server для разных поддоменов
    
    # API поддомен - загрузка крупных файлов
    server {
        listen 443 ssl http2;
        server_name api.yourdomain.com;
        client_max_body_size 100M;
    }
    
    # Статический блог - минимум загрузок
    server {
        listen 443 ssl http2;
        server_name blog.yourdomain.com;
        client_max_body_size 5M;
    }
}

Рекомендации для типичных случаев:

  • Сайты на WordPress: 64-100 МБ (хватает для загрузки медиа, установки плагинов/тем)
  • REST API: 5-10 МБ (полезная нагрузка JSON обычно невелика)
  • Файлообменники: 500 МБ-2 ГБ (зависит от максимального разрешенного размера файла)
  • Контактные формы: 5 МБ (вполне достаточно для небольших вложений)
  • Платформы онлайн-обучения: 250-500 МБ (материалы курсов, презентации, видео)

⚠️ Вопросы безопасности:

  • Не устанавливайте слишком высокие значения глобально — это делает вас уязвимыми для DoS-атак (пользователи могут забивать канал огромными файлами)
  • Используйте ограничения на уровне конкретных location, чтобы разрешить загрузку больших файлов только для нужных эндпоинтов
  • Комбинируйте с ограничением скорости (rate limiting), чтобы предотвратить злоупотребления
  • Следите за дисковым пространством — для больших загрузок нужно место
  • Рассмотрите использование client_body_timeout для предотвращения атак типа "медленная загрузка" (slowloris)

Тестирование ваших настроек:

  1. Загрузите файл максимально ожидаемого размера
  2. Если вы получаете ошибку 413 Request Entity Too Large, увеличьте лимит
  3. Установите лимит на 20-30% выше вашего максимального ожидаемого размера файла
  4. Протестируйте конфигурацию с помощью nginx -t перед перезагрузкой: nginx -s reload

Связанные настройки: Также откорректируйте client_body_buffer_size (по умолчанию 16k) и client_body_timeout (по умолчанию 60s) для оптимальной производительности при загрузке больших файлов.

Шаг 4: Настройка файла .htaccess

Для повышения безопасности и производительности, настройте ваш .htaccess, следуя лучшим практикам конфигурации сжатия gzip в nginx и стратегиям кэширования для оптимизации nginx:

.htaccess
ErrorDocument 404 /404.html # Пользовательская страница для ошибок 404

AddDefaultCharset UTF-8 # Устанавливает кодировку символов по умолчанию для вашего сайта (UTF-8)

RewriteEngine On # Включает движок mod_rewrite, позволяя использовать перенаправления URL

# Принудительный HTTPS
RewriteCond %{HTTPS} off # Проверяет, что соединение НЕ использует HTTPS
RewriteRule ^(.*)$ https://domain.com$1 [L,R=301] # Перенаправляет HTTP-запросы на HTTPS для безопасного соединения

# Перенаправление с IPv4 адреса на домен
RewriteCond %{HTTP_HOST} ^0.0.0.0$ [OR] # Проверяет, идет ли запрос напрямую к вашему IPv4 адресу
RewriteRule ^(.*)$ https://domain.com$1 [L,R=301] # Перенаправляет любые запросы с IP-адреса на ваш домен

# Опционально: Перенаправление с www на версию без www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] # Проверяет, начинается ли URL с "www." (без учета регистра)
RewriteRule ^(.*)$ https://domain.com$1 [L,R=301] # Перенаправляет запросы "www" на версию вашего домена без www, сохраняя остальную часть URL

# Сжатие Gzip
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css # Сжимает HTML, простой текст, XML и CSS файлы для ускорения загрузки
    AddOutputFilterByType DEFLATE application/javascript application/x-javascript application/xml # Сжимает JavaScript и XML файлы
    AddOutputFilterByType DEFLATE image/svg+xml # Сжимает SVG изображения
    AddOutputFilterByType DEFLATE application/rss+xml application/atom_xml # Сжимает RSS и Atom фиды
    AddOutputFilterByType DEFLATE application/x-font-ttf application/x-font-opentype application/vnd.ms-fontobject # Сжимает файлы шрифтов
    BrowserMatch ^Mozilla/4 gzip-only-text/html # Запрещает старым браузерам использовать сжатие gzip для всего, кроме HTML
    BrowserMatch ^Mozilla/4\.0[678] no-gzip # Отключает gzip для очень старых браузеров
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # Не исключает старые версии Internet Explorer из сжатия gzip
    Header append Vary User-Agent # Гарантирует, что сжатые файлы отправляются в зависимости от user-agent
</IfModule>

# Управление кэшем
<IfModule mod_expires.c>
    ExpiresActive On # Включает кэширование статических файлов

    # Время кэширования по умолчанию
    ExpiresDefault "access plus 1 day" # По умолчанию все файлы кэшируются на 1 день

    ExpiresByType text/css "access plus 1 day" # Кэшировать CSS файлы на 1 день

    # Кэшировать изображения (JPEG, PNG, GIF, WebP, SVG) на 1 год
    ExpiresByType image/jpeg "access plus 1 year" # Кэшировать JPEG изображения на 1 год
    ExpiresByType image/png "access plus 1 year" # Кэшировать PNG изображения на 1 год
    ExpiresByType image/gif "access plus 1 year" # Кэшировать GIF изображения на 1 год
    ExpiresByType image/webp "access plus 1 year" # Кэшировать WebP изображения на 1 год
    ExpiresByType image/svg+xml "access plus 1 year" # Кэшировать SVG изображения на 1 год
    
    # Кэшировать видеофайлы (MP4, WebM, OGG, Quicktime) на 1 год
    ExpiresByType video/mp4 "access plus 1 year" # Кэшировать MP4 видео на 1 год
    ExpiresByType video/webm "access plus 1 year" # Кэшировать WebM видео на 1 год
    ExpiresByType video/ogg "access plus 1 year" # Кэшировать OGG видео на 1 год
    ExpiresByType video/quicktime "access plus 1 year" # Кэшировать Quicktime видео на 1 год

    # Кэшировать JavaScript файлы на 1 год
    ExpiresByType application/javascript "access plus 1 year" # Кэшировать JavaScript на 1 год
    ExpiresByType application/x-javascript "access plus 1 year" # Кэшировать X-JavaScript на 1 год

    ExpiresByType application/pdf "access plus 1 year" # Кэшировать PDF файлы на 1 год

    # Кэшировать шрифты на 1 год
    ExpiresByType font/ttf "access plus 1 year" # Кэшировать TTF шрифты на 1 год
    ExpiresByType font/otf "access plus 1 year" # Кэшировать OTF шрифты на 1 год
    ExpiresByType font/woff "access plus 1 year" # Кэшировать WOFF шрифты на 1 год
    ExpiresByType font/woff2 "access plus 1 year" # Кэшировать WOFF2 шрифты на 1 год
</IfModule>

# Заголовки Cache Control (для браузеров и CDN)
<IfModule mod_headers.c> 
    # Кэшировать CSS на 1 день
    <FilesMatch "\.(css)$">
        Header set Cache-Control "max-age=86400, public" # Устанавливает время жизни кэша для CSS на 1 день
    </FilesMatch>

    # Кэшировать изображения на 1 год
    <FilesMatch "\.(jpg|svg|jpeg|png|gif|webp)$">
        Header set Cache-Control "max-age=31536000, public" # Устанавливает время жизни кэша для картинок на 1 год
    </FilesMatch>
    
    # Кэшировать видео на 1 год
    <FilesMatch "\.(mp4|webm|ogg|mov)$">
        Header set Cache-Control "max-age=31536000, public" # Устанавливает время жизни кэша для видео на 1 год
    </FilesMatch>

    # Кэшировать JavaScript на 1 год
    <FilesMatch "\.(js)$">
        Header set Cache-Control "max-age=31536000, public" # Устанавливает время жизни кэша для JS файлов на 1 год
    </FilesMatch>

    # Кэшировать PDF на 1 год
    <FilesMatch "\.(pdf)$">
        Header set Cache-Control "max-age=31536000, public" # Устанавливает время жизни кэша для PDF на 1 год
    </FilesMatch>

    # Кэшировать шрифты на 1 год
    <FilesMatch "\.(ttf|otf|woff|woff2)$">
        Header set Cache-Control "max-age=31536000, public" # Устанавливает время жизни кэша для шрифтов на 1 год
    </FilesMatch>
</IfModule>

# Заголовок Strict-Transport-Security (HSTS) - важнейшая функция безопасности для сайтов, работающих по HTTPS.
<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" # Строго требует использования HTTPS для всех поддоменов сроком на 1 год
</IfModule>

ВАЖНО! Замените domain.com на ваше реальное доменное имя (Например: kolodych.com, abc.org, petsof.net).

Замените 0.0.0.0 на ваш реальный IPv4 адрес. Вы можете узнать его с помощью команды ifconfig или ip a, либо посмотреть в панели управления сервером.

Убедитесь, что ваши DNS-записи указывают на правильный IP-адрес для вашего домена. Вы можете настроить DNS-записи в панели управления вашего хостинг-провайдера.

Шаг 5: Пример файла Robots TXT

Сделайте ваш сайт дружелюбным к SEO, правильно настроив файл robots.txt:

robots.txt
User-agent: *
Disallow: /private/
Allow: /public/
Sitemap: https://domain.com/sitemap.xml

ВАЖНО! Замените domain.com на ваше реальное доменное имя (Например: kolodych.com, abc.org, petsof.net).

Шаг 6: Пример XML Sitemap (Карты сайта)

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

sitemap.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- Декларация XML -->
<urlset xmlns="https://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:image="https://www.google.com/schemas/sitemap-image/1.1" xmlns:video="https://www.google.com/schemas/sitemap-video/1.1" xsi:schemaLocation="https://www.sitemaps.org/schemas/sitemap/0.9 https://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> <!-- Декларация набора URL -->
<!-- Created with Free Online Sitemap Generator www.xml-sitemaps.com --> <!-- Комментарий генератора карты сайта -->
<url> <!-- Начало блока URL --> <loc>https://domain.com/</loc> <!-- URL главной страницы --> <lastmod>2024-08-13T12:36:05+00:00</lastmod> <!-- Дата последнего изменения --> <priority>1.00</priority> <!-- Приоритет = 1.00 ТОЛЬКО для главной страницы --> </url> <!-- Конец блока URL -->
<url> <!-- Начало другого блока URL --> <loc>https://domain.com/page1</loc> <!-- URL Страницы 1 --> <lastmod>2024-10-24T04:19:18+00:00</lastmod> <!-- Дата последнего изменения --> <priority>0.80</priority> <!-- Приоритет = 0.8-0.9 для важных страниц, таких как Услуги, Категории --> <changefreq>monthly</changefreq> <!-- Частота изменений: never, yearly, monthly, weekly... --> <image:image> <!-- Начало блока изображения --> <image:loc>https://domain.com/images/image1.webp</image:loc> <!-- Расположение картинки --> <image:caption>image_caption_text_here</image:caption> <!-- Подпись к картинке --> <image:title>Image_title_goes_here</image:title> <!-- Название картинки --> </image:image> <!-- Конец блока изображения --> </url> <!-- Конец блока URL -->
<url> <!-- Начало еще одного блока URL --> <loc>https://domain.com/page2</loc> <!-- URL Страницы 2 --> <lastmod>2024-08-04</lastmod> <!-- Дата последнего изменения --> <priority>0.6-0.7</priority> <!-- Приоритет = 0.6-0.7 для часто обновляемых страниц, например статей блога --> <changefreq>monthly</changefreq> <!-- Частота изменений ... вплоть до daily, hourly, always для срочных новостей --> </url> <!-- Конец блока URL -->
<!-- Add more URLs here for other pages --> <!-- Добавьте сюда больше URL для остальных страниц --> </urlset> <!-- Конец набора URL -->

ВАЖНО! Замените domain.com на ваше доменное имя (Например: kolodych.com, abc.org, petsof.net), а также внимательно проверьте все пути: https://, page1, page2, image1, image_caption_text_here и другие...

Nginx multi_accept и расширенная настройка воркеров

Одна из самых недооцененных настроек производительности nginx — это multi_accept. По умолчанию каждый рабочий процесс (worker) принимает одно новое соединение за раз. При multi_accept on; в блоке events, каждый воркер принимает все ожидающие в очереди соединения одновременно. При резких всплесках трафика это дает ощутимую разницу.

Полностью оптимизированный блок events для тюнинга производительности nginx:

nginx.conf
worker_processes auto;
worker_rlimit_nofile 65535;

events {
    worker_connections 4096;
    multi_accept on;
    use epoll;
}
  • worker_processes auto: распределяет один процесс на каждое ядро процессора, ручная настройка размера nginx не требуется
  • worker_rlimit_nofile 65535: увеличивает лимит открытых файловых дескрипторов на один воркер, это необходимо для высоконагруженной конфигурации nginx
  • worker_connections 4096: общая пропускная способность = worker_processes x worker_connections
  • multi_accept on: принимает все ожидающие соединения за один цикл обработки событий, сглаживает скачки задержек (latency)
  • use epoll: специфичная для Linux модель обработки событий, обычно и так включена по умолчанию в современных ядрах, но лучше задать явно

Эта конфигурация является частью любого серьезного чек-листа по настройке производительности nginx, и это первое, о чем забывают при оптимизации nginx под реальными нагрузками.

Nginx и Node.js: sendfile и производительность статических файлов

Когда nginx стоит перед приложением на Node.js, одной из наиболее эффективных оптимизаций является передача всей статики напрямую через nginx, вместо проксирования к Node. Это особенно актуально, если вспомнить историю с Node.js 0.6 и sendfile: ранние версии Node не могли эффективно поддерживать системный вызов sendfile() на уровне ядра, что делало nginx лучшим выбором для отдачи статических файлов даже в то время.

Соответствующая конфигурация nginx:

domain.com
server {
    listen 443 ssl;
    server_name yourdomain.com;

    # Nginx раздает статические файлы напрямую — опция sendfile on обрабатывает это на уровне ядра
    location /static/ {
        root /var/www/myapp;
        sendfile on;
        tcp_nopush on;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    # Все остальное проксируется на Node.js
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

ВАЖНО! Замените yourdomain.com на ваше реальное доменное имя (Например: kolodych.com, abc.org, petsof.net). Также обновите /static/, чтобы он соответствовал URL-пути, откуда раздаются ваши статические файлы, /var/www/myapp на абсолютный путь к вашему приложению на сервере, и 3000 на порт, который фактически слушает ваш процесс Node.js.

Благодаря этой настройке nginx берет на себя всю работу со статическими файлами с помощью sendfile на уровне ядра, а Node.js фокусируется исключительно на динамических запросах. Этот шаблон работает независимо от вашей версии Node и остается лучшей практикой nginx для любой конфигурации обратного прокси-сервера (reverse proxy).

Часто задаваемые вопросы о конфигурации Nginx (FAQ)

Как оптимизировать nginx для высокого трафика?

Чтобы оптимизировать nginx для высокого трафика, увеличьте worker_connections (2048+), включите HTTP/2, внедрите кэширование FastCGI, используйте сжатие gzip, оптимизируйте размеры буферов и настройте правильные таймауты. Данный подход к конфигурации nginx под высокие нагрузки гарантирует минимальную задержку (latency) nginx. Отслеживайте ресурсы вашего сервера и корректируйте настройки nginx на основе реальных показателей трафика для непрерывного тюнинга производительности nginx.

Каковы минимальные системные требования nginx?

Минимальные требования Nginx весьма скромны: 512 МБ оперативной памяти (RAM), 1 ядро процессора и 10 ГБ на диске. Тем не менее, для production сред, требующих высокой производительности nginx и правильного масштабирования nginx, мы рекомендуем как минимум 1 ГБ RAM, 2 ядра процессора и SSD-накопитель для оптимальной работы.

Где находится конфигурационный файл nginx?

Основной конфигурационный файл nginx располагается по пути /etc/nginx/nginx.conf. Конфигурации виртуальных хостов обычно хранятся в /etc/nginx/sites-available/ и активируются с помощью символических ссылок (симлинков) в /etc/nginx/sites-enabled/. Понимание расположения этих файлов необходимо для управления настройками nginx.

Как включить HTTP/2 в nginx?

Чтобы включить HTTP/2 в nginx, добавьте http2 в вашу директиву listen: listen 443 ssl http2;. HTTP/2 требует SSL/TLS, поэтому убедитесь, что у вас настроены действительные сертификаты в соответствии с лучшими практиками nginx TLS 2024. Это значительно повышает производительность nginx для современных браузеров и помогает ускорить время ответа nginx.

Каковы лучшие практики безопасности для nginx?

Лучшие практики безопасности Nginx включают: скрытие номеров версий (server_tokens off), ограничение скорости (rate limiting), использование только современных протоколов TLS (TLSv1.2+) согласно лучшей практике nginx ssl_prefer_server_ciphers 2024, добавление заголовков безопасности (X-Frame-Options, CSP), включение HSTS, регулярные обновления и тщательный мониторинг логов. Следуйте этому руководству по защите nginx для обеспечения комплексной безопасности и регулярно просматривайте советы по безопасности nginx.

Как проверить конфигурацию nginx на наличие ошибок?

Используйте sudo nginx -t, чтобы проверить вашу конфигурацию nginx на синтаксические ошибки перед применением изменений. Эта команда валидирует ваши конфигурационные файлы и сообщает о любых проблемах, предоставляя необходимую помощь по nginx на этапе настройки. Всегда тестируйте файлы перед перезагрузкой с помощью sudo systemctl reload nginx, чтобы соблюдать лучшие практики работы с конфигами nginx.

Как я могу улучшить производительность nginx?

Повысить производительность nginx можно за счет: оптимизации рабочих процессов (worker), включения сжатия с использованием лучших практик конфигурации gzip в nginx, внедрения кэширования (FastCGI, браузерного), оптимизации размеров буферов, включая client_max_body_size, использования HTTP/2, настройки правильных таймаутов, эффективной отдачи статического контента и использования CDN. Регулярный тюнинг производительности nginx и настройка nginx на основе анализа трафика критически важны для оптимизации nginx.

Какое значение client_max_body_size лучшее?

Это зависит от вашего юзкейса: 10 МБ для обычных сайтов, 64-100 МБ для WordPress, 500 МБ-2 ГБ для видеоплатформ. Изучите наше полное руководство по настройке client_max_body_size в Шаге 3* для получения подробных рекомендаций и примеров кода.

В чем разница между nginx и Apache?

Nginx использует событийно-ориентированную (event-driven) архитектуру, обеспечивая низкое потребление ресурсов и более высокую производительность nginx при работе со статикой и множеством одновременных подключений. Это идеальный выбор, если вам нужно оптимизировать веб-сервер. Apache использует процессную модель, которая лучше подходит для динамического контента и поддержки .htaccess. Nginx требует прямого редактирования файла конфигурации nginx, в то время как Apache позволяет использовать файлы .htaccess для каждой директории в отдельности. Для высокопроизводительных серверов nginx обычно предлагает лучшие показатели задержки (latency).

Заключение: Освоение конфигурации Nginx для максимальной производительности

В этом подробном руководстве по nginx мы рассмотрели всё: от базовой установки до продвинутых методов оптимизации nginx. Следуя этим лучшим практикам nginx и внедрив правильную конфигурацию nginx, вы сможете построить высокопроизводительный, безопасный веб-сервер, способный обрабатывать существенный трафик с минимальной задержкой nginx.

Ключевые выводы

  • Производительность Nginx: Грамотная настройка рабочих процессов (workers), буферов и кэширования кардинально повышает скорость. Используйте это руководство по тюнингу производительности nginx для быстрого старта оптимизации nginx.
  • Безопасность превыше всего: Внедрите лучшие практики безопасности nginx, включая современный TLS согласно лучшим практикам nginx TLS 2024 и лучшей практике nginx ssl_prefer_server_ciphers 2024, заголовки безопасности и ограничение частоты запросов. Используйте это руководство по защите nginx вместе с советами по безопасности nginx.
  • Регулярное обслуживание: Тестируйте конфигурации с помощью команд проверки nginx, отслеживайте статус nginx и своевременно обновляйте nginx для оптимальной работы.
  • Оптимизация: Используйте HTTP/2, применяйте лучшие практики конфигурации gzip в nginx и правильное кэширование, чтобы оптимизировать nginx и ускорить nginx для комфорта пользователей.
  • Управление конфигурацией: Следите за тем, чтобы ваш конфиг nginx был организованным, задокументированным и находился под контролем версий, следуя лучшим практикам написания конфигов nginx и настройке nginx 2026.

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

Для тех, кто собирает высокопроизводительные серверы с нуля на базе фундаментальных принципов nginx, это руководство по конфигурации nginx предлагает полноценную дорожную карту: от понимания минимальных требований nginx и масштабирования nginx до внедрения продвинутых стратегий тюнинга nginx и оптимизации конфигов nginx. Выполняйте эти лучшие практики nginx шаг за шагом для достижения оптимальных результатов.