Налаштування підтримки HTTP/2 Nginx в Ubuntu 20

Nginx – спритний вебсервер з відкритим початковим кодом, який заслужив довіру. Йому надають перевагу за незначне споживання пам’яті, легкість налаштування і підтримку великої кількості протоколів. HTTP/2 – бінарна вдосконалена версія протоколу для швидкої передачі даних від сервера до користувача.
Оскільки HTTP 1.1 – це протокол з обмеженою кількістю одночасних підключень, який збільшував затримку завантаження важких сторінок через послідовність завантаження, ось через майже 20 років було прийнято рішення позбутися елементів, які перешкоджали підвищенню продуктивності.
HTTP/2 вирішує проблему шляхом паралельного завантаження даних (а не послідовного, як було раніше), стисненням полів заголовків HTTP. В основу оновленого протоколу покладено мультиплексування потоків, що являє собою розстановку пріоритетів між важчими потоками – це важливо в умовах обмеження ресурсів.
Крім прискорення завантаження сторінок сайту, перехід на протокол HTTP/2 також підвищить безпеку передачі даних між сервером і відвідувачами, оскільки у всіх сучасних браузерах обов’язковою умовою підтримки протоколу HTTP/2 є шифрування з’єднання між клієнтом і сервером (сайт повинен працювати по HTTPS, тобто мати встановлений SSL сертифікат).
Процес переходу на HTTP/2
У вас є сервер Ubuntu 20.04 або 22.04 з root-доступом і встановленим Nginx.
Доменне ім’я, для якого налаштовуємо роботу по HTTP/2, має бути спрямоване на ваш сервер. У нас ви маєте можливість зареєструвати новий домен, перевести існуючий до нас на обслуговування або направити домен у вашого реєстратора по А-запису на ваш сервер.
Також для цього домену на сервер необхідно встановити SSL сертифікат: це може бути як безкоштовний Let’s Encrypt, так і один з платних сертифікатів, які ви можете придбати на нашому сайті (роботу production’a на самопідписному сертифікаті не розглядаємо).
Для коректної роботи сайту по HTTP/2 необхідно налаштувати перенаправлення трафіку з 80 на 443 порт (автоматичне перенаправлення запитів з HTTP на HTTPS протокол).
Підключення підтримки HTTP/2
У разі, якщо під час встановлення Nginx ви виконали налаштування блоку server, то задаємо наступні параметри для використання HTTP/2 вашим доменом. Насамперед, внесемо в конфігураційний файл налаштування, що безпосередньо відповідають за HTTP/2:
Відкриваємо конфігураційний файл домену користувача:
vim /etc/nginx/sites-available/ваш_домен
Далі підключимо HTTP/2 для IPv6 з’єднань і IPv4 підключень в секції listen для порту 443:
listen [::]:443 ssl http2 ipv6only=on;
listen 443 ssl http2;
після чого збережіть зміни.
Після внесення корективів потрібно провести перевірку на відсутність синтаксичних помилок:
nginx -t
Якщо помилки допущені не були, ми отримаємо наступний висновок:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Обмежимо використання небезпечних шифрів на сервері. Шифр (Cipher Suites) – алгоритми виконання криптографічних функцій для шифрування передачі даних.
На наступному кроці проведемо очищення неактуальних і небезпечних шифрів, наприклад, виключимо використання шифрування MD5, яке вважається небезпечним.
Відкриваємо необхідний конфігураційний файл:
vim /etc/nginx/sites-available/ваш_домен
Приводимо опцію ssl_ciphers до наступного вигляду:
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
Зберігаємо внесені зміни і виходимо.
І ще раз перевіряємо чи не допустили синтаксичних помилок:
nginx -t
Перезавантажуємо вебсервер після внесених налаштувань.
systemctl restart nginx.service
Перевірка коректної роботи HTTP/2
Почнемо з найпростішого методу перевірки в консолі за допомогою curl. Виконуємо запит:
curl -I -L https://ваш_домен
і отримуємо приблизно наступний результат:
HTTP/2 200
server: nginx/1.14.0 (Ubuntu)
date: Mon, 15 Jun 2020 20:28:01 GMT
content-type: text/html
content-length: 240
last-modified: Fri, 12 Jun 2020 10:50:34 GMT
etag: "5ee35dfa-f0"
accept-ranges: bytes
Також можна виконати перевірку за допомогою Google Chrome: Інші інструменти – Інструменти розробника (або натискаємо F12), переходимо на вкладку Network, правою кнопкою натискаємо по заголовку Таблиці і вибираємо опцію Protocol. У випадку правильного налаштування, в новому стовпчику відобразиться значення h2 (скорочення від HTTP/2)

У підсумку, контент буде обслуговуватися сервером по захищеному протоколу HTTP/2.
Ми вже маємо налаштований редирект з HTTP на HTTPS. Додамо також заголовок HTTP Strict Transport Security, щоб виключити пріоритет цих перенаправлень. Таким чином, якщо браузер виявить HSTS-заголовок, він не стане підключатися через HTTP. Обмін даними відбуватиметься виключно по захищеному з’єднанню HTTPS.
Відкриємо конфігураційний файл:
vim /etc/nginx/nginx.conf
У файлі конфігурації Nginx в текстовому редакторі прописуємо:
http {
...
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
add_header Strict-Transport-Security "max-age=15768000" always;
}
...
Значення max age встановлюємо в секундах.
Дане правило застосовується для основних доменів. У разі, якщо необхідно розширити заголовок, для субдоменів додаємо includeSubDomains, як в нашому випадку:
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
Ви вже знаєте, що після збереження і виходу з текстового редактора, ми обов’язково перевіряємо синтаксис:
nginx -t
і перезапускаємо вебсервер.
systemctl restart nginx.service
Також додамо, що існують онлайн-чекери протоколу HTTP/2. До прикладу, це може бути HTTP/2 Test або HTTP2.Pro. Вони чудово виконують свої функції, тому, якщо такий варіант підійде вам більше, їх легко знайти за допомогою пошукових систем.

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

Як налаштувати HTTPS для OpenCart
Цього разу розглянемо перехід на HTTPS для сайту на OpenCart 2.x и 3.x. Як і...
Оновлено: 08.10.2020
|
Як налаштувати HTTPS для WordPress?
У попередній частині ми розібралися, чому після встановлення SSL-сертифіката на сайт ви можете отримувати помилку небезпечного...
Оновлено: 07.10.2020
|
Як налаштувати HTTPS для Joomla?
Продовжуємо тему переведення на HTTPS для різних CMS. У цій частині розглянемо, як правильно...
Оновлено: 03.10.2020
|
Як налаштувати HTTPS для MODX?
Без зайвих вступів продовжуємо говорити про перехід на протокол HTTPS для різних CMS. Сьогодні...
Оновлено: 02.10.2020
|
Наш телеграм
з важливими анонсами, розіграшами й мемами
Приєднатися