HTTP/2 — улучшенная версия протокола HTTP, предназначенная для передачи страниц между сервером и браузером. Основная проблема протокола HTTP 1.1 заключалась в ограниченной скорости передачи данных, так как загрузка происходила по частям и поочередно. Современные сайты могут совершать более 100 запросов для загрузки контента (JS/CSS файлы, изображения и пр.). Чтобы справиться с такой нагрузкой, был разработан протокол HTTP 2.
Основные изменения:
- параллельные запросы и загрузка контента;
- сжатые HTTP-заголовки;
- передача данных в двоичной кодировке, а не в виде текста;
- отправка данных по инициативе сервера (server push).
Для корректной работы протокола HTTP/2 необходимо настроить поддержку HTTPS.
1 этап. Подготовка сервера
Все действия по установке производятся на сервере через подключение по SSH.
Для настройки HTTP/2 вам необходимы:
- Сервер с операционной системой Ubuntu 18.04/20.04.
- Активный SSL-сертификат. В Рег.ру вы можете получить бесплатный SSL-сертификат для домена.
- Зарегистрированный и привязанный к вашему серверу домен: Как привязать домен к Облачному серверу?
Создание пользователя
Все действия по установке Nginx и настройке HTTP/2 рекомендуем выполнять не через пользователя root. Рекомендуем создать пользователя с sudo-правами. Так вы дополнительно обезопасите свой сервис и избежите случайных ошибок, которые могут сломать вашу операционную систему.
Чтобы создать пользователя, введите команду:
adduser userName
Где UserName — имя нового пользователя.
Система попросит ввести пароль для нового пользователя и дополнительную информацию:
Теперь установите права доступа, чтобы новый пользователь мог использовать команду sudo. Для этого выполните команду:
usermod -aG sudo UserName
Где UserName — имя созданного ранее пользователя.
Готово, новый пользователь создан. Завершите SSH-сеанс под root и подключитесь к серверу под новым пользователем.
Обновление операционной системы
Прежде чем установить Nginx, нужно обновить операционную систему до актуального состояния с помощью команды:
sudo apt update
2 этап. Установка Nginx
Репозиторий Ubuntu 18.04/20.04 предоставляет Nginx версии старше 1.9.5 с поддержкой HTTP/2, поэтому установка происходит одной командой и не требует добавления сторонних репозиториев.
Установите Nginx командой:
sudo apt-get install nginx
Проверьте установку командой:
sudo nginx -v
Система покажет версию установленного Nginx.
Для большинства проектов, помимо веб-сервера, необходимо дополнительно установить базы данных и PHP. Установить LEMP (Linux, Nginx, MySQL, PHP) вы можете по инструкции, пропустив «2 этап. Установка Nginx», так как это мы сделали ранее.
Готово, установка Ubuntu Nginx завершена.
3 этап. Добавление SSL-сертификата
Для добавления SSL-сертификата на сервер вам необходимы:
- Сам сертификат, корневой и промежуточный сертификаты. Если SSL-сертификат был заказан в Рег.ру, после его активации эти данные отправляются на контактный e-mail, а также они дублируются в личном кабинете в карточке услуги.
- Приватный ключ. Генерируется на этапе заказа сертификата. Рег.ру не хранит приватные ключи сертификатов. Мы рекомендуем сохранить ключ на локальном компьютере.
Создайте директорию для хранения сертификатов в директории настроек веб-сервера командой:
sudo mkdir /etc/nginx/ssl
Создайте файл командой:
sudo nano /etc/nginx/ssl/faq-reg.ru.crt
Вместо faq-reg.ru
укажите имя вашего домена, который привязан к серверу. Вставьте сам SSL-сертификат, промежуточный и корневой сертификаты в один файл. Обратите внимание: все сертификаты следуют друг за другом, без пустых строк. Сохраните и закройте файл:
Создайте ещё один файл командой:
sudo nano /etc/nginx/ssl/faq-reg.ru.key
Не забудьте вместо faq-reg.ru
указать имя вашего домена. Вставьте в файл приватный ключ SSL-сертификата, сохраните и закройте его:
Откройте файл конфигурации веб-сервера командой:
sudo nano /etc/nginx/sites-available/default
После директив listen
добавьте следующие строки:
ssl_certificate /etc/nginx/ssl/faq-reg.ru.crt;
ssl_certificate_key /etc/nginx/ssl/faq-reg.ru.key;
Не забудьте изменить имя домена в названии файлов. Эти строки указывают путь к файлам сертификата. Сохраните изменения и закройте файл:
4 этап. Отключение устаревших шифров
В HTTP/2 есть чёрный список старых и небезопасных шифров, которые следует отключить. Наборы шифров – это криптографические алгоритмы, которые описывают методы шифрования передачи данных. Затем необходимо настроить новый набор шифров, который блокирует использование небезопасного шифрования MD5.
Откройте конфигурационный файл Nginx командой:
sudo nano /etc/nginx/nginx.conf
Добавьте после ssl_prefer_server_ciphers on
следующую строку:
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
Сохраните изменения и закройте файл. Проверьте конфигурации на наличие ошибок:
sudo nginx -t
5 этап. Перенаправление HTTP на HTTPS
Так как наш сервер будет работать только с протоколом HTTPS, необходимо настроить перенаправление запросов. В конце конфигурационного файла веб-сервера создайте новый блок server
, который будет осуществлять редирект.
Откройте конфигурационный файл веб-сервера командой:
sudo nano /etc/nginx/sites-available/default
Вы можете скопировать содержимое ниже и вставить в конфиг. Не забудьте изменить домен faq-reg.ru
на ваш:
server {
listen 80;
listen [::]:80;
server_name faq-reg.ru;
return 301 https://$server_name$request_uri;
}
Сохраните изменения и закройте файл. Проверьте конфигурационный файл на наличие ошибок с помощью команды:
sudo nginx -t
6 этап. Включение HTTP/2 и настройка порта
После установки Nginx веб-сервер по умолчанию будет настроен на работу по протоколу HTTP на 80 порту. Нужно изменить порт на 443 для использования HTTPS.
Откройте конфигурационный файл веб-сервера командой:
sudo nano /etc/nginx/sites-available/default
В файле вы увидите блок server с примерным содержанием:
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_pass unix:/run/php/php7.0-fpm.sock;
#}
#location ~ /\.ht {
# deny all;
#}
}
В этот файл внесите следующие изменения:
- Закомментируйте следующее две строки, добавив перед ними знак
#
:
#listen 80 default_server;
#listen [::]:80 default_server;
- Раскоментируйте следующее две строки, убрав перед ними знак
#
. Чтобы включить HTTP 2, в первой строке после «ssl» добавьтеhttp2
:
listen 443 ssl http2 default_server;
listen [::]:443 ssl default_server;
- Чуть ниже найдите директиву server_name. По умолчанию установлено значение
_
(нижнее подчёркивание). Вместо него укажите имя вашего домена, который привязан к серверу. Например:
server_name faq-reg.ru
Сохраните и закройте файл. Результат:
Проверьте синтаксис на ошибки:
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 HTTP 2 завершена.
7 этап. Перезагрузка Nginx
Если при проверке конфигурационного файла не возникло ошибок, нужно перезапустить Nginx. Если убрать закомментированные строки из конфигурационного файла, должно получиться следующее:
Выполните перезагрузку Nginx командой:
sudo systemctl restart nginx
Готово, установка Nginx и настройка HTTP/2 завершена.
Помогла ли вам статья?
Спасибо за оценку. Рады помочь 😊