Как активировать протокол HTTP/2 в Nginx на сервере Debian 8 Jessie

В данном руководстве мы расскажем, как активировать протокол HTTP/2 с помощью Nginx на сервере Debian 8 для повышения скорости загрузки веб-страниц. Вам понадобится выполнить два условия.

  • Nginx версии 1.9.5 или новее, скомпилированный с использованием OpenSSL 1.0.2.
  • Активированный HTTPS

Давайте рассмотрим их по одному.

Установка Nginx из репозитория Backports для Jessie.

ALPN (Negotiation of Application Layer Protocols) — это дополнение к TLS, которое даёт возможность серверам согласовывать использование протокола HTTP/2 с веб-браузерами. В отсутствии ALPN установка соединения по протоколу HTTP/2 невозможна, даже если и сервер, и браузер поддерживают этот протокол. Поддержка ALPN в библиотеке OpenSSL доступна, начиная с версии 1.0.2.

Debian 8 поставляется с OpenSSL версии 1.0.1. Чтобы узнать текущую версию OpenSSL, выполните команду:

openssl version

Имейте в виду, что установка OpenSSL 1.0.2 на систему не является обязательной. Нам нужен только Nginx версии 1.9.5 или новее, который должен быть собран с использованием OpenSSL 1.0.2. Поддержка HTTP/2 была внедрена в Nginx начиная с версии 1.9.5. В стандартном репозитории Debian 8 доступна версия Nginx 1.6.2. Однако репозиторий Jessie Backports предлагает Nginx 1.10.3, собранный с OpenSSL 1.0.2l.

Читайте также:  Настройка автоматического обновления пакетов

Для того чтобы подключить этот репозиторий, необходимо создать файл со списком источников.

sudo nano /etc/apt/sources. list. d/jessie-backports. list

Вставьте следующую строку в данный файл.

deb http://ftp. debian. org/debian jessie-backports main

Сохраните изменения в файле и закройте его. После этого обновите индекс пакетов и установите Nginx из репозитория Jessie Backports.

sudo apt update sudo apt - t jessie-backports install nginx

Убедитесь в актуальности версии Nginx и настройте необходимые параметры.

sudo nginx - V

nginx version: nginx/1.10.3построен с использованиемOpenSSL версии 1.0.2l 25 May 2017 поддержка TLS SNI включена

Репозиторий Nginx. org предлагает актуальную версию Nginx для Debian 8. Однако этот пакет основан на OpenSSL 1.0.1, что делает невозможным использование поддержки ALPN.

Инсталляция SSL-сертификата на Debian 8.

Мы можем настроить бесплатный SSL-сертификат от Let’s Encrypt. В первую очередь необходимо установить клиент Let’s Encrypt (Certbot) на Debian 8 из репозитория Jessie Backports. Плагин Python-certbot-nginx предназначен для работы с Nginx и используется вместе с Certbot.

sudo apt install - t jessie-backports certbot python-certbot-nginx

Если вы уже настроили виртуальный хост в Nginx, примените плагин Nginx для получения и установки SSL-сертификата, следуя приведённым ниже инструкциям.

Читайте также:  Правило iptables для прозрачного проксирования в squid в Linux

sudo certbot --nginx --agree-tos - d example.com--перенаправить --скрепка-ocsp --обязательно-скрепить --электронная почтаваш-адрес-электронной-почты

Имейте в виду, что для корректной работы может потребоваться очистка кэша браузера, так как кэшированные данные могут неверно распознаваться с использованием протокола HTTP/1.1.

Как активировать Server Push

HTTP/2 предлагает возможность, известную как server push, которая дает веб-серверу возможность отправлять ресурсы, не запрашиваемые веб-браузером, но необходимые для загрузки страниц. К примеру, когда веб-браузер запрашивает HTML-документ, веб-сервер может заранее определить, что клиенту потребуется связанный CSS-файл, и отправляет его вместе с HTML-документом. Это позволяет избежать дополнительного запроса на CSS, тем самым сокращая количество обращений к серверу.

В качестве примера я привожу WordPress. Для создания сайта на этой платформе обычно требуются следующие ресурсы.

  • style. css: главный файл стилей, находящийся в корне каталога темы.
  • jquery. js: библиотека jQuery
  • jquery-migrate. min. js: устаревшая версия JQuery
  • wp-embed. min. js: для интеграции видео

Для того чтобы отправить эти ресурсы клиентам, включите указанные директивы в блок сервера. Не забудьте заменить twentyseventeen на название вашей темы WordPress.

http2_push /wp-content/themes/twentyseventeen/style. css; http2_push /wp-includes/js/jquery/jquery. js; http2_push /wp-includes/js/jquery/jquery-migrate. min. js; http2_push /wp-includes/js/wp-embed. min. js;

Сохраните файл и закройте его. После этого перезапустите Nginx, чтобы применить изменения.

sudo systemctl restart nginx

Учтите, что для удаления номера версии из CSS и JavaScript файлов WordPress вам следует внести указанный код в файл functions.php. Если номер версии останется, функция server push не будет функционировать при обновлении WordPress.

Проверка функции Server Push

В Google Chrome откройте нужную вам страницу, затем нажмите сочетание клавиш Ctrl+Shift+I, чтобы запустить инструменты разработчика, и перейдите на вкладку «Сеть». После этого обновите страницу, нажав F5. На скриншоте ниже можно увидеть, как работает серверный пуш на одном из моих сайтов. Если вы заметите надпись «из кэша памяти», кликните по ней правой кнопкой мыши, очистите кэш браузера и обновите страницу.

Улучшения

Плагин Certbot для Nginx пока не достиг достаточной зрелости. После применения плагина Nginx я получил оценку B на тесте SSL Labs из-за использования неустойчивых параметров обмена ключами. Генератор SSL-конфигураций от Mozilla является отличным инструментом, который поможет вам создать актуальные SSL-настройки.

Вот и подошли к завершению! Надеюсь, что данный учебник был полезен для вас в настройке HTTP/2 с Nginx на Debian 8. Если вам понравился этот пост, не забудьте подписаться на нашу бесплатную рассылку новостей!

Вот и всё! Надеюсь, этот гайд оказался полезным для вас при активации HTTP/2 с помощью Nginx на сервере.