Як встановити 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, цей посібник безпосередньо застосовується до вашого середовища.
Зміст
- Що таке HTTP/2 і чому це важливо?
- Передумови
- Крок 1 — Оновлення індексу пакетів системи
- Крок 2 — Встановлення Nginx
- Крок 3 — Встановлення OpenSSL
- Крок 4 — Отримання безплатного SSL-сертифіката за допомогою Let’s Encrypt
- Крок 5 — Конфігурація Nginx для HTTP/2
- Крок 6 — Оптимізація конфігурації Nginx HTTP/2
- Крок 7 — Тестування конфігурації Nginx
- Крок 8 — Перезавантаження Nginx та застосування змін
- Крок 9 — Перевірка активності HTTP/2
- Усунення поширених проблем
- Висновок
Що таке HTTP/2 і чому це важливо?
HTTP/2 — це друга основна версія протоколу передачі гіпертексту, стандартизована в RFC 7540. Вона була розроблена для вирішення проблем продуктивності HTTP/1.1, який використовується з 1997 року.
Ключові переваги HTTP/2 порівняно з HTTP/1.1:
| Функція | HTTP/1.1 | HTTP/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 statusNginx 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.comCertbot буде:
- Перевіряти право власності на домен через виклик HTTP
- Видати сертифікат від Let’s Encrypt
- Автоматично змінити конфігурацію Nginx для використання сертифіката
- Налаштувати перенаправлення 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: h2h2 — це ідентифікатор ALPN для HTTP/2. Якщо ви це бачите, ваш сервер правильно оголошує підтримку HTTP/2 під час рукостискання TLS.
Метод 3: Використання інструментів розробника браузера
- Відкрийте свій веб-сайт у Google Chrome або Mozilla Firefox
- Натисніть
F12для відкриття Developer Tools - Перейдіть на вкладку Network
