15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
01.11.2024

Як встановити Nginx з підтримкою HTTP/2 на Ubuntu (Повний посібник)

Nginx — один з найбільш широко розгорнутих веб-серверів у світі, відомий своєю винятковою продуктивністю, низьким споживанням пам’яті та здатністю обробляти тисячі одночасних з’єднань. У поєднанні з HTTP/2 Nginx стає ще потужнішою платформою — забезпечуючи мультиплексовані запити, стиснення заголовків, серверний push та значно скорочені часи завантаження сторінок.

Цей комплексний посібник проведе вас через кожен крок, необхідний для встановлення Nginx з повною підтримкою HTTP/2 на Ubuntu 20.04 та Ubuntu 22.04 LTS, від початкового налаштування через конфігурацію SSL, оптимізацію блоків сервера та живу перевірку.

> Для кого цей посібник? Системні адміністратори, розробники та власники веб-сайтів, які хочуть максимізувати продуктивність веб-сервера на сервері Linux. Якщо ви запускаєте свій сайт на плані VPS Hosting або Dedicated Server, цей посібник безпосередньо застосовується до вашого середовища.

Зміст

  1. Що таке HTTP/2 і чому це важливо?
  2. Передумови
  3. Крок 1 — Оновлення індексу пакетів системи
  4. Крок 2 — Встановлення Nginx
  5. Крок 3 — Встановлення OpenSSL
  6. Крок 4 — Отримання безплатного SSL-сертифіката за допомогою Let’s Encrypt
  7. Крок 5 — Конфігурація Nginx для HTTP/2
  8. Крок 6 — Оптимізація конфігурації Nginx HTTP/2
  9. Крок 7 — Тестування конфігурації Nginx
  10. Крок 8 — Перезавантаження Nginx та застосування змін
  11. Крок 9 — Перевірка активності HTTP/2
  12. Усунення поширених проблем
  13. Висновок

Що таке HTTP/2 і чому це важливо?

HTTP/2 — це друга основна версія протоколу передачі гіпертексту, стандартизована в RFC 7540. Вона була розроблена для вирішення проблем продуктивності HTTP/1.1, який використовується з 1997 року.

Ключові переваги HTTP/2 порівняно з HTTP/1.1:

ФункціяHTTP/1.1HTTP/2
МультиплексуванняОдин запит на з’єднанняКілька одночасних запитів
Стиснення заголовківЗаголовки у простому текстовому форматіСтиснення HPACK
Серверний pushНе підтримуєтьсяПідтримується
Двійковий протоколТекстовийДвійкове фреймування
Повторне використання з’єднанняОбмеженеПовністю постійне
ЗатримкаВищаЗначно зменшена

Для власників веб-сайтів включення HTTP/2 безпосередньо перекладається на швидше завантаження сторінок, кращі оцінки Core Web Vitals та покращений рейтинг SEO — оскільки Google використовує швидкість сторінки як сигнал рейтингу.

> Важливо: HTTP/2 вимагає HTTPS (TLS/SSL). Ви не можете запускати HTTP/2 через незашифроване з’єднання в жодному сучасному браузері. Тому отримання SSL-сертифіката є обов’язковим кроком у цьому посібнику. Якщо вам потрібен надійний сертифікат для вашого домену, AlexHost пропонує SSL-сертифікати для всіх випадків використання.

Передумови

Перед початком переконайтеся, що у вас є наступне:

  • Сервер, що працює на Ubuntu 20.04 LTS або Ubuntu 22.04 LTS (кроки майже ідентичні для обох)
  • Користувач без прав root з sudo привілеями або прямий доступ root
  • Зареєстрована назва домену, спрямована на IP-адресу вашого сервера через запис A
  • Порти 80 та 443 відкриті у вашому брандмауері (UFW або iptables)
  • Базове знайомство з командним рядком Linux

Якщо у вас ще немає домену, ви можете зареєструвати його безпосередньо через AlexHost Domain Registration та спрямувати його на ваш сервер за кілька хвилин.

Крок 1 — Оновлення індексу пакетів системи

Завжди починайте з оновлення індексу пакетів, щоб переконатися, що ви встановлюєте найновіші доступні версії всього програмного забезпечення:

sudo apt update && sudo apt upgrade -y

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

Крок 2 — Встановлення Nginx

Встановлення пакета Nginx

Репозиторії Ubuntu за замовчуванням включають стабільну версію Nginx. Встановіть її за допомогою:

sudo apt install nginx -y

Запуск служби Nginx

Після встановлення негайно запустіть службу Nginx:

sudo systemctl start nginx

Включення Nginx для автоматичного запуску при завантаженні

Переконайтеся, що Nginx запускається автоматично кожного разу, коли сервер перезавантажується:

sudo systemctl enable nginx

Перевірка запуску Nginx

Підтвердьте, що служба активна та працює:

sudo systemctl status nginx

Ви повинні побачити вихід, подібний до:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since ...

Дозвіл Nginx через брандмауер

Якщо UFW активний на вашому сервері, дозвольте трафік HTTP та HTTPS:

sudo ufw allow 'Nginx Full'
sudo ufw status

Nginx Full відкриває як порт 80 (HTTP), так і порт 443 (HTTPS), обидва необхідні для цього налаштування.

Крок 3 — Встановлення OpenSSL

HTTP/2 залежить від TLS, який, у свою чергу, залежить від OpenSSL. Встановіть його, щоб переконатися, що всі криптографічні залежності доступні:

sudo apt install openssl -y

Перевірте встановлену версію:

openssl version

Ви повинні побачити вихід, подібний до OpenSSL 3.0.x або подібний. Будь-яка версія вище 1.0.2 повністю підтримує набори шифрів, необхідні для HTTP/2.

Крок 4 — Отримання безплатного SSL-сертифіката за допомогою Let’s Encrypt

Let’s Encrypt надає безплатні, автоматично поновлювані SSL/TLS-сертифікати, яким довіряють усі основні браузери. Клієнт Certbot робить весь процес простим.

Встановлення Certbot та плагіна Nginx

sudo apt install certbot python3-certbot-nginx -y

Запит вашого SSL-сертифіката

Замініть your_domain.com на вашу фактичну зареєстровану назву домену:

sudo certbot --nginx -d your_domain.com -d www.your_domain.com

Certbot буде:

  1. Перевіряти право власності на домен через виклик HTTP
  2. Видати сертифікат від Let’s Encrypt
  3. Автоматично змінити конфігурацію Nginx для використання сертифіката
  4. Налаштувати перенаправлення HTTPS з HTTP

Дотримуйтеся інтерактивних підказок. Коли вас запитають, чи перенаправляти трафік HTTP на HTTPS, виберіть варіант 2 (Redirect) — це рекомендований вибір.

Перевірка автоматичного поновлення сертифіката

Сертифікати Let’s Encrypt закінчуються через 90 днів. Certbot встановлює завдання cron або таймер systemd для їх автоматичного поновлення. Протестуйте процес поновлення за допомогою пробного запуску:

sudo certbot renew --dry-run

Якщо помилок не з’являється, автоматичне поновлення налаштовано правильно.

> Порада: Для виробничих середовищ з кількома доменами або підстановочними сертифікатами розглядайте Dedicated Server для повного контролю над вашою SSL-інфраструктурою.

Крок 5 — Конфігурація Nginx для HTTP/2

Тепер, коли SSL налаштовано, вам потрібно явно включити HTTP/2 у конфігурації блоку сервера Nginx.

Відкриття файлу конфігурації Nginx

Конфігурація сайту за замовчуванням розташована за адресою:

sudo nano /etc/nginx/sites-available/default

Якщо ви створили користувацький блок сервера для вашого домену (рекомендується), замість цього відкрийте цей файл:

sudo nano /etc/nginx/sites-available/your_domain.com

Оновлення блоку сервера для включення HTTP/2

Знайдіть директиву listen 443 ssl;. Certbot додасть це автоматично. Змініть його, щоб включити http2:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name your_domain.com www.your_domain.com;

    # SSL Certificate paths (set by Certbot)
    ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /var/www/your_domain.com/html;
    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ =404;
    }
}

# HTTP to HTTPS redirect block
server {
    listen 80;
    listen [::]:80;
    server_name your_domain.com www.your_domain.com;
    return 301 https://$host$request_uri;
}

Критична зміна знаходиться на рядку listen: додавання http2 після ssl активує протокол HTTP/2 для цього віртуального хоста.

Збереження та вихід

Натисніть CTRL + X, потім Y, потім Enter для збереження файлу та виходу з редактора nano.

Крок 6 — Оптимізація конфігурації Nginx HTTP/2

Просто включення HTTP/2 — це хороший початок, але застосування додаткових оптимізацій забезпечує максимальну продуктивність вашого налаштування.

Рекомендовані параметри SSL та продуктивності

Додайте або перевірте наступні директиви всередину вашого блоку server:

# Modern TLS protocols only
ssl_protocols TLSv1.2 TLSv1.3;

# Strong cipher suites compatible with HTTP/2
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;

# SSL session caching for performance
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;

# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

# HTTP Strict Transport Security (HSTS)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

# Additional security headers
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";

# Gzip compression (complements HTTP/2)
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;

> Примітка про HTTP/2 та Gzip: HTTP/2 використовує власне стиснення заголовків HPACK, але включення Gzip для тіл відповідей все ще забезпечує значну економію пропускної здатності для текстових активів.

Крок 7 — Тестування конфігурації Nginx

Ніколи не перезавантажуйте Nginx без попередньої перевірки конфігурації на синтаксичні помилки. Неправильно налаштований файл може вивести з ладу весь ваш веб-сервер.

Запустіть вбудований тест конфігурації:

sudo nginx -t

Успішний тест видає:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Якщо ви бачите будь-які помилки, уважно перегляньте вихід. Повідомлення про помилку включатиме назву файлу та номер рядка, де була виявлена проблема.

Крок 8 — Перезавантаження Nginx та застосування змін

Після успішного тесту конфігурації перезавантажте Nginx, щоб застосувати всі зміни:

sudo systemctl restart nginx

Крім того, якщо ви віддаєте перевагу перезавантаженню без простоїв (яке застосовує зміни конфігурації без розривання активних з’єднань):

sudo systemctl reload nginx

Для включення HTTP/2 конкретно рекомендується повне перезавантаження, щоб переконатися, що нові параметри протоколу повністю ініціалізовані.

Крок 9 — Перевірка активності HTTP/2

Після перезавантаження Nginx підтвердьте, що HTTP/2 насправді обслуговується клієнтам, використовуючи один із наступних методів.

Метод 1: Використання curl

Інструмент командного рядка curl може повідомити про версію протоколу, яка використовується:

curl -I --http2 https://your_domain.com

Шукайте заголовок відповіді:

HTTP/2 200

Якщо ви бачите HTTP/2 200, HTTP/2 працює правильно.

Метод 2: Використання команди OpenSSL

openssl s_client -connect your_domain.com:443 -alpn h2

У виході шукайте:

ALPN protocol: h2

h2 — це ідентифікатор ALPN для HTTP/2. Якщо ви це бачите, ваш сервер правильно оголошує підтримку HTTP/2 під час рукостискання TLS.

Метод 3: Використання інструментів розробника браузера

  1. Відкрийте свій веб-сайт у Google Chrome або Mozilla Firefox
  2. Натисніть F12 для відкриття Developer Tools
  3. Перейдіть на вкладку Network
15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати