HTTP/2 — улучшенная версия протокола HTTP, предназначенная для передачи страниц между сервером и браузером. Ключевое ограничение предыдущей версии заключалось в последовательной обработке запросов: при загрузке веб-страницы, содержащей множество элементов (изображения, скрипты, стили), каждый следующий запрос ожидал завершения предыдущего.
Протокол HTTP/2 устраняет это ограничение за счет параллельной передачи запросов и ответов в рамках одного TCP-соединения. Это критически важно для современных веб-приложений, которые могут запрашивать более 100 запросов для полной загрузки страницы.
Основные изменения:
- параллельные запросы и загрузка контента;
- сжатые HTTP-заголовки;
- передача данных в двоичной кодировке, а не в виде текста;
- отправка данных по инициативе сервера (server push).
Важно:
HTTP/2 в современных браузерах работает только через защищенное соединение (HTTPS). Поэтому настройка SSL/TLS сертификата является обязательным условием для использования протокола
1 этап. Подготовка сервера
Для настройки HTTP/2 вам понадобятся:
- виртуальный сервер в Рег.облаке с ОС Ubuntu 22.04/24.04;
- действующий SSL-сертификат для вашего домена. В Рег.ру вы можете получить бесплатный SSL-сертификат для домена;
- зарегистрированный и привязанный к вашему серверу домен: Как привязать домен к Облачному серверу.
Создание пользователя
В целях безопасности рекомендуется работать под учетной записью, не обладающей правами суперпользователя, но имеющей возможность их получения через sudo.
-
1
Подключитесь к серверу по протоколу SSH под пользователем root и создайте нового пользователя:
adduser userName
Где UserName — имя нового пользователя.
Система запросит пароль и дополнительные данные (их можно оставить пустыми, нажав Enter).
-
2
Добавьте пользователя в группу sudo, чтобы он мог выполнять команды с привилегиями суперпользователя:
usermod -aG sudo UserName
-
3
Завершите текущую сессию:
exit
-
4
Выполните повторное подключение от имени созданного пользователя:
ssh UserName@ваш_IP_сервера
Готово, новый пользователь создан.
Обновление операционной системы
Перед установкой Nginx обновите список доступных пакетов из репозиториев:
sudo apt update
2 этап. Установка Nginx
В официальных репозиториях Ubuntu 22.04/24.04 уже содержатся версии Nginx с поддержкой HTTP/2 (1.18+ и 1.24+ соответственно).
-
1
Установите Nginx командой:
sudo apt install nginx -y
-
2
После завершения установки проверьте актуальную версию установленного Nginx:
sudo nginx -v
Пример вывода:
nginx version: nginx/1.24.0 (Ubuntu)
Готово, установка Nginx завершена.
Если вам также необходима установка базы данных и PHP (Linux, Nginx, MySQL, PHP) воспользуйтесь инструкцией, пропустив установку Nginx.
3 этап. Добавление SSL-сертификата
Для добавления SSL-сертификата на сервер вам необходимы:
- сертификат, корневой и промежуточный сертификаты. Если SSL-сертификат был заказан в Рег.ру, после его активации эти данные отправляются на контактный e-mail, а также они дублируются в личном кабинете в карточке услуги;
- приватный ключ. Генерируется на этапе заказа сертификата. Рег.ру не хранит приватные ключи сертификатов. Мы рекомендуем сохранить ключ на локальном компьютере.
-
1
Создайте директорию для хранения SSL-сертификатов:
sudo mkdir /etc/nginx/ssl
-
2
Создайте файл сертификата и откройте его для редактирования:
sudo nano /etc/nginx/ssl/example.com.crt
Вместо example.com укажите имя вашего домена, который привязан к серверу.
-
3
Вставьте в файл содержимое сертификата, за которым сразу (без пустых строк) следует содержимое промежуточного и корневого сертификатов. Сохраните файл.
-
4
Создайте файл приватного ключа:
sudo nano /etc/nginx/ssl/example.com.key
-
5
Вставьте в файл содержимое приватного ключа SSL-сертификата. Сохраните его.
Вместо example.com укажите имя вашего домена.
4 этап. Редактирование конфигурации сайта для поддержки HTTP/2
-
1
Откройте файл конфигурации виртуального хоста (сайта) по умолчанию:
sudo nano /etc/nginx/sites-available/default
-
2
Приведите содержимое блока server, отвечающего за обработку HTTPS-трафика, к следующему виду:
server {
# Прослушивание 443 порта с включением SSL и протокола HTTP/2
listen 443 ssl http2;
listen [::]:443 ssl http2;
# Доменное имя сервера
server_name example.com;
# Пути к файлам сертификата и ключа
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
# Корневая директория документов
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}
Где:
- listen 443 ssl http2 – указывает Nginx принимать соединения на 443-м порту, использовать SSL/TLS и поддерживать протокол HTTP/2;
- ssl_certificate и ssl_certificate_key – задают пути к файлам сертификата и приватного ключа соответственно.
-
3
Затем сохраните файл.
5 этап. Отключение устаревших шифров
Отключение устаревших шифров в HTTP/2 необходимо для обеспечения безопасности и корректной работы протокола, поскольку многие старые алгоритмы имеют известные уязвимости и больше не считаются надежными. Современные браузеры по умолчанию используют TLS 1.2 и выше, а наличие устаревших шифров может вызывать ошибки при установлении соединения. Кроме того, актуальные алгоритмы лучше оптимизированы и обеспечивают более стабильную и быструю работу при параллельных запросах.
-
1
Создайте файл с общими настройками SSL:
sudo nano /etc/nginx/snippets/ssl-params.conf
-
2
Внесите в него следующие директивы (основанные на рекомендациях Mozilla):
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
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:DHE-RSA-AES256-GCM-SHA384';
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
-
3
Сохраните файл и закройте редактор.
-
4
Подключите созданный файл конфигурации в блок server файла /etc/nginx/sites-available/default:
server {
# Прослушивание 443 порта с включением SSL и протокола HTTP/2
listen 443 ssl http2;
listen [::]:443 ssl http2;
# Доменное имя сервера
server_name example.com;
# Пути к файлам сертификата и ключа
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
# Подключение оптимизированных параметров SSL
include snippets/ssl-params.conf;
# Корневая директория документов
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}
6 этап. Перенаправление HTTP на HTTPS
Для обеспечения доступа к сайту исключительно по защищенному протоколу необходимо настроить редирект с 80-го порта (HTTP) на 443-й (HTTPS). Добавьте в конец файла /etc/nginx/sites-available/default следующий блок:
server {
listen 80;
listen [::]:80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
Сохраните файл и закройте редактор.
7 этап. Проверка конфигураций и перезапуск 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
После успешной проверки выполните перезагрузку (или перезапуск) службы Nginx для применения новой конфигурации:
sudo systemctl restart nginx
Готово. Вы установили и настроили Nginx с поддержкой HTTP/2 на Ubuntu в Рег.облаке.
8 этап. Проверка работоспособности HTTP/2
Чтобы убедиться, что сайт работает с использованием протокола HTTP/2, выполните следующие действия:
-
1
В браузере перейдите по адресу вашего сайта, например, https://example.com.
-
2
Активируйте инструменты разработчика (F12).
-
3
Перейдите на вкладку Network (Сеть) и обновите страницу.
-
4
Найдите в списке загружаемых ресурсов первый запрос. Он, как правило, соответствует основному домену.
-
5
В столбце Protocol (если столбец не отображается, добавьте его через контекстное меню) должно быть указано h2.
Если отображается h2, это означает, что протокол HTTP/2 успешно активирован и используется для соединения.