Як встановити 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 і чому це важливо?
HTTP/2 — це друга основна версія протоколу Hypertext Transfer Protocol, стандартизована в RFC 7540. Вона була розроблена для вирішення проблем продуктивності HTTP/1.1, який використовується з 1997 року.
Ключові переваги HTTP/2 над HTTP/1.1:
| Функція | HTTP/1.1 | HTTP/2 |
|---|---|---|
| Мультиплексування | Один запит на з’єднання | Кілька одночасних запитів |
| Стиснення заголовків | Заголовки у простому текстовому форматі | Стиснення HPACK |
| Серверна передача | Не підтримується | Підтримується |
| Бінарний протокол | Текстовий | Бінарне фреймування |
| Повторне використання з’єднання | Обмежене | Повністю постійне |
| Затримка | Вища | Значно зменшена |
Для власників веб-сайтів включення 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 (кроки майже однакові для обох)
- Непривілейований користувач з
sudoпривілеями або прямий доступ root - Зареєстроване доменне ім’я, спрямоване на IP-адресу вашого сервера через A запис
- Порти 80 та 443 відкриті у вашому брандмауері (UFW або iptables)
- Базові знання командного рядка Linux
Якщо у вас ще немає домену, ви можете зареєструвати його безпосередньо через Реєстрацію доменів AlexHost і спрямувати його на ваш сервер за кілька хвилин.
Крок 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 (Перенаправити) — це рекомендований вибір.
Перевірте автоматичне поновлення сертифіката
Сертифікати Let’s Encrypt закінчуються через 90 днів. Certbot встановлює завдання cron або таймер systemd для їх автоматичного поновлення. Протестуйте процес поновлення за допомогою пробного запуску:
sudo certbot renew --dry-runЯкщо помилок не з’явиться, автоматичне поновлення налаштовано правильно.
> Порада: Для виробничих середовищ з кількома доменами або підстановочними сертифікатами розгляньте Виділений сервер для повного контролю над вашою 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для відкриття інструментів розробника - Перейдіть на вкладку Network
- Перезавантажте сторінку (
F5абоCtrl+R) - Клацніть правою кнопкою миші на будь-якому заголовку стовпця в списку запитів і увімкніть стовпець Protocol
- Ви повинні побачити
h2як протокол для запитів вашого домену
Метод 4: Використання онлайн-інструменту тестування HTTP/2
Відвідайте https://tools.keycdn.com/http2-test і введіть свій домен. Інструмент підтвердить, чи активний HTTP/2, і надасть додаткові деталі про конфігурацію TLS вашого сервера.
Усунення поширених проблем
HTTP/2 не відображається в браузері незважаючи на конфігурацію
- Причина: Браузер кешував старіше з’єднання HTTP/1.1.
- Рішення: Очистіть кеш браузера та файли cookie, або протестуйте в приватному/інкогніто вікні.
nginx -t повертає помилки SSL сертифіката
- Причина: Неправильні шляхи сертифіката у файлі конфігурації.
- Рішення: Перевірте точні шляхи за допомогою
sudo ls /etc/letsencrypt/live/your_domain.com/та оновіть директивиssl_certificateтаssl_certificate_keyвідповідно.
Порт 443 недоступний
- Причина: Брандмауер блокує трафік HTTPS.
- Рішення: Запустіть
sudo ufw allow 443/tcpта перевірте за допомогоюsudo ufw status.
Certbot не проходить перевірку домену
- Причина: DNS A запис ще не поширився, або порт 80 заблокований.
- Рішення: Перевірте, що ваш домен розв’язується на правильну IP за допомогою
dig your_domain.com A. Переконайтеся, що порт 80 відкритий для ACME HTTP виклику.
unknown directive "http2" помилка в Nginx
- Причина: Версія Nginx занадто стара (до 1.9.5) або була скомпільована без підтримки HTTP/2.
- Рішення: Оновіть Nginx. На Ubuntu 20.04+, версія з репозиторію за замовчуванням підтримує HTTP/2. Ви також можете додати офіційний Nginx PPA:
sudo add-apt-repository ppa:nginx/stable && sudo apt update && sudo apt upgrade nginx.
Висновок
Ви успішно встановили Nginx з повною підтримкою HTTP/2 на Ubuntu. Ось резюме всього досягнутого:
- ✅ Встановлено та увімкнено Nginx як системний сервіс
- ✅ Отримано безплатний, автоматично оновлюваний SSL-сертифікат через Let's Encrypt та Certbot
- ✅ Налаштовано блок сервера Nginx з директивою
http2 - ✅ Застосовано посилення TLS, OCSP stapling, HSTS та стиснення Gzip
- ✅ Протестовано конфігурацію та перевірено активність HTTP/2
Включення HTTP/2 — це одна з найбільш впливових та найменш затратних оптимізацій, які ви можете зробити для веб-сервера. У поєднанні з надійними параметрами TLS та правильними заголовками кешування це значно покращує час завантаження сторінок, оцінки Core Web Vitals та, в кінцевому підсумку, рейтинг вашого сайту в пошукових системах.
Тримайте свій стек актуальним: Регулярно запускайте sudo apt update && sudo apt upgrade для оновлення Nginx, OpenSSL та Certbot з найновішими патчами безпеки.
Підніміть продуктивність вашого сервера ще вище
Прибутки в продуктивності від HTTP/2 найбільш помітні на швидкій та надійній інфраструктурі. Якщо ви зараз користуєтесь спільним хостингом і досягаєте обмежень ресурсів, розгляньте можливість переходу на план VPS Hosting для отримання виділених ресурсів та повного доступу root. Для додатків з високим трафіком Dedicated Servers пропонують неперевершену сиру продуктивність. Ви також можете легко керувати середовищем сервера за допомогою VPS з cPanel, якщо ви віддаєте перевагу графічному інтерфейсу замість командного рядка.
Незалежно від ваших потреб у інфраструктурі, AlexHost надає платформу для запуску Nginx, HTTP/2 та всього вашого веб-стека з максимальною ефективністю.
на всіх хостингових послугах