Шукаєте практичний туторіал з nginx, який охоплює реальну оптимізацію продуктивності nginx без зайвої води? Цей посібник з кращих практик налаштування nginx 2026 охоплює все: від встановлення до просунутих технік оптимізації nginx. Незалежно від того, чи ви системний адміністратор, якого будять о 3-й ночі через гальмування сервера, чи ви тільки починаєте, цей посібник надасть вам перевірені кращі практики nginx 2026, готові для копіювання конфігурації та повний посібник з вибору розмірів (sizing guide) nginx для будь-якого рівня трафіку.

⚡ Коротка відповідь:

  • Час налаштування: 45 хвилин
  • Рівень навичок: Середній (скопіювати-вставити, конфігурації надаються)
  • Приріст продуктивності: на 40-60% швидший час відгуку
  • Пропускна здатність трафіку: Обробка понад 10 000 запитів/с
  • Вартість: Безкоштовно (open source)

Короткий підсумок: Що ви опануєте

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

Зміст

Що таке Nginx і навіщо його використовувати?

Nginx (вимовляється як "енджін-ікс") - це потужний, універсальний веб-сервер, розроблений для високої продуктивності, ефективного використання ресурсів та виняткової масштабованості. Використовується для веб-хостингу, зворотного проксі (reverse proxy), балансування навантаження та кешування, nginx чудово справляється зі сценаріями високого трафіку з мінімальною затримкою 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
  • Дотримання найновіших стандартів кращої практики nginx ssl_prefer_server_ciphers 2024 року

Nginx чудово справляється з обслуговуванням статичного контенту, роботою як зворотний проксі та балансуванням навантаження, мінімізуючи при цьому використання ресурсів. Ось як він виглядає порівняно з іншими веб-серверами:

Nginx порівняно з іншими веб-серверами: Порівняння продуктивності
Характеристика Nginx Apache Microsoft Google Cloudflare LiteSpeed
Частка ринку (Жовтень 2024) 18.98% 17.86% 2.03% 10.12% 16.28% 6.23%
Продуктивність Висока конкурентність, ефективний для статичного контенту Повільніший при високій конкурентності, кращий для динамічного контенту Обмежена масштабованість Оптимізовано для Google Cloud Висока продуктивність, особливо з кешуванням Найшвидший для динамічного та статичного контенту
Ефективність використання ресурсів Низьке споживання ресурсів Помірне споживання ресурсів Вище споживання ресурсів Оптимізовано для мінімальних ресурсів Висока ефективність Висока ефективність, особливо для WordPress
Балансування навантаження Так Обмежено Обмежено Так Так Так
Підтримка зворотного проксі (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 і вашу здатність ефективно оптимізувати nginx.

Ключові фактори для вибору VPS

  • Потреби трафіку: Обирайте VPS з достатніми ресурсами для очікуваного зростання трафіку. Для сайтів з високим трафіком розглядайте сервери з принаймні 2 ГБ оперативної пам'яті та 2 ядрами процесора, щоб ефективно оптимізувати 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: Посібник з розмірів сервера (Sizing Guide)

Розуміння правил розрахунку розміру nginx допоможе вам вибрати правильний VPS для вашого посібника з розмірів nginx:

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

Наведений нижче посібник з розмірів nginx зіставляє рівні трафіку з конкретним обладнанням та значеннями конфігурації. Використовуйте це, щоб вибрати правильний VPS і встановити початкові параметри робочих процесів (worker) перед тюнінгом.

Посібник з розмірів Nginx за рівнем трафіку
Рівень трафіку Запитів/с ОЗУ Ядра CPU worker_connections multi_accept
Невеликий блог / портфоліо до 100 512 МБ 1 512 off
Бізнес-сайт / SaaS 100–1 000 2 ГБ 2 1024 on
Додаток з високим трафіком 1 000–10 000 4–8 ГБ 4 4096 on
Високе навантаження / вузол CDN 10 000+ 16 ГБ+ 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;  # Максимальна кількість одночасних з'єднань на кожен робочий процес (worker). Ви можете змінити це залежно від потреб трафіку.
    multi_accept on;  # Кожен worker приймає всі нові з'єднання одночасно, а не по одному. Рекомендується для оптимізації nginx під високим навантаженням.
    }
    
http {
    sendfile on;  # Вмикає ефективну передачу файлів через копіювання на рівні ядра. Залиште увімкненим для роздачі статичних файлів. Node.js додатки за nginx також отримують від цього користь.
    tcp_nopush on;  # Оптимізує TCP пакети для надсилання великих файлів. Залиште як є, якщо немає специфічних вимог.
    types_hash_max_size 2048;  # Обмежує максимальний розмір хеш-таблиці для MIME-типів. Зазвичай значення за замовчуванням достатньо.
    include /etc/nginx/mime.types;  # Підключає файл конфігурації, який зіставляє розширення файлів з 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; # Запобігає відображенню сайту у фреймах (iframe). Залиште для безпеки, якщо немає іншої потреби. 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. Цей розділ показує вам, як налаштувати віртуальні хости (server blocks), дотримуючись кращих практик конфігурації 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. Після створення файлу ви зможете редагувати його за потреби + створити символічне посилання (symlink) до 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;  # Коренева папка вашого сайту (document root)
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, оптимізувавши ваш сервер для продуктивності та безпеки за допомогою належних принципів посібника із захисту (hardening) 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 МБ: Сайти електронної комерції, завантаження профілів користувачів, управління документами
  • 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 endpoint для завантаження файлів
        location /api/upload {
            client_max_body_size 100M;
        }
        
        # Адмін-панель для управління медіа
        location /admin/media {
            client_max_body_size 500M;
        }
        
        # Endpoint для завантаження відео
        location /videos/upload {
            client_max_body_size 2G;
        }
    }
    # Або використовуйте окремі server blocks для різних субдоменів
    
    # 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 payload зазвичай невеликі)
  • Платформи обміну файлами: 500 МБ-2 ГБ (залежить від максимального дозволеного розміру файлу)
  • Контактні форми: 5 МБ (достатньо для невеликих вкладень)
  • Платформи електронного навчання: 250 МБ-500 МБ (матеріали курсів, презентації, відео)

⚠️ Міркування безпеки:

  • Не встановлюйте його занадто високим глобально — це відкриває вас для DoS-атак (користувачі завантажують величезні файли)
  • Використовуйте ліміти для конкретних location, щоб обмежити великі завантаження лише певними endpoint-ами
  • Поєднуйте з обмеженням швидкості (rate limiting) для запобігання зловживанням
  • Контролюйте дисковий простір — великі завантаження потребують обсягу пам'яті
  • Розгляньте використання client_body_timeout для запобігання атакам повільного завантаження

Тестування ваших налаштувань:

  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 старими браузерами
    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>

# Заголовки контролю кешу (для браузерів та 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" # Встановлює кеш для JavaScript файлів на 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 для оптимального індексування пошуковими системами:

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 --> <!-- Коментар генератора Sitemap -->
<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 та розширене налаштування Worker-ів

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

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

nginx.conf
worker_processes auto;
worker_rlimit_nofile 65535;

events {
    worker_connections 4096;
    multi_accept on;
    use epoll;
}
  • worker_processes auto: зіставляє один worker з кожним ядром процесора, ручне налаштування розміру nginx не потрібне
  • worker_rlimit_nofile 65535: збільшує ліміт відкритих файлових дескрипторів на один worker, необхідно для конфігурації nginx з високою конкурентністю
  • worker_connections 4096: загальна ємність = worker_processes x worker_connections
  • multi_accept on: приймає всі очікуючі з'єднання за один цикл подій, зменшує стрибки затримок
  • 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 для будь-якої конфігурації зворотного проксі.

Поширені запитання про конфігурацію Nginx (FAQ)

Як оптимізувати nginx для високого трафіку?

Щоб оптимізувати nginx для високого трафіку, збільште worker_connections (2048+), увімкніть HTTP/2, впровадьте кешування FastCGI, використовуйте стиснення gzip, оптимізуйте розміри буферів та налаштуйте правильні параметри timeout. Цей підхід до конфігурації nginx під високі навантаження гарантує мінімальну затримку 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 за допомогою: оптимізації робочих процесів, увімкнення стиснення з використанням кращих практик конфігурації стиснення 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 використовує подієво-орієнтовану архітектуру з меншим споживанням ресурсів і кращою продуктивністю nginx для статичного контенту та високої конкурентності, що робить його ідеальним, коли вам потрібно оптимізувати nginx. Apache використовує процесно-орієнтовану модель, яка краще підходить для динамічного контенту та підтримки .htaccess. Nginx вимагає прямого редагування файлів конфігурації nginx, тоді як Apache дозволяє використовувати файли .htaccess для кожного каталогу. Для високопродуктивних серверів nginx зазвичай пропонує кращі характеристики затримки nginx.

Висновок: Освоєння конфігурації Nginx для максимальної продуктивності

Цей вичерпний посібник з nginx охопив усе: від базової інсталяції до передових методів оптимізації nginx. Дотримуючись цих кращих практик nginx та впроваджуючи правильну конфігурацію nginx, ви можете створити високопродуктивний, безпечний веб-сервер, здатний обробляти значний трафік з мінімальною затримкою nginx.

Основні висновки

  • Продуктивність Nginx: Правильне налаштування робочих процесів, буферів та кешування значно покращує продуктивність. Використовуйте цей посібник з тюнінгу продуктивності 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. Дотримуйтеся цих кращих практик nginx крок за кроком для отримання оптимальних результатів.