Перейти к основному контенту

Как установить Nginx с поддержкой HTTP/2 на Ubuntu 18.04/20.04

HTTP/2 — улучшенная версия протокола HTTP, предназначенная для передачи страниц между сервером и браузером. Основная проблема протокола HTTP 1.1 заключалась в ограниченной скорости передачи данных, так как загрузка происходила по частям и поочередно. Современные сайты могут совершать более 100 запросов для загрузки контента (JS/CSS файлы, изображения и пр.). Чтобы справиться с такой нагрузкой, был разработан протокол HTTP 2.

Основные изменения:

  • параллельные запросы и загрузка контента;
  • сжатые HTTP-заголовки;
  • передача данных в двоичной кодировке, а не в виде текста;
  • отправка данных по инициативе сервера (server push).

Для корректной работы протокола HTTP/2 необходимо настроить поддержку HTTPS.

1 этап. Подготовка сервера

Все действия по установке производятся на сервере через подключение по SSH.

Для настройки HTTP/2 вам необходимы:

Создание пользователя

Все действия по установке Nginx и настройке HTTP/2 рекомендуем выполнять не через пользователя root. Рекомендуем создать пользователя с sudo-правами. Так вы дополнительно обезопасите свой сервис и избежите случайных ошибок, которые могут сломать вашу операционную систему.

Чтобы создать пользователя, введите команду:

adduser userName

Где UserName — имя нового пользователя.

Система попросит ввести пароль для нового пользователя и дополнительную информацию:

Теперь установите права доступа, чтобы новый пользователь мог использовать команду sudo. Для этого выполните команду:

usermod -aG sudo UserName

Где UserName — имя созданного ранее пользователя.

Готово, новый пользователь создан. Завершите SSH-сеанс под root и подключитесь к серверу под новым пользователем.

Обновление операционной системы

Прежде чем установить Nginx, нужно обновить операционную систему до актуального состояния с помощью команды:

sudo apt update

Сервис настройки NGINX

Не тратьте время на ручную подготовку конфигурационных файлов для NGINX. Выберите нужные параметры и скачайте уже сформированный конфигурационный файл.

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-сертификат был заказан в REG.RU, после его активации эти данные отправляются на контактный e-mail, а также они дублируются в Личном кабинете в карточке услуги.

  • Приватный ключ. Генерируется на этапе заказа сертификата. REG.RU не хранит приватные ключи сертификатов. Мы рекомендуем сохранить ключ на локальном компьютере.

Создайте директорию для хранения сертификатов в директории настроек веб-сервера командой:

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 завершена.

Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 0 из 0