В Nginx http2 поддерживается начиная с версии 1.9.5. При сборке требуется использовать opennsl версии 1.0.2, в противном случае браузер не будет воспринимать HTTP2. Часто в существующих инсталяциях используются более ранние версии и начинать приходится с обновления Nginx.
Перед подобными операциями всегда стоит делать копии конфигурационных файлов:
cp -R /etc/nginx /opt/nginx_orig
Обновление выполняется одной командой:
apt-get update && apt-get install nginx
Если в подключенных репозиториях более свежей версии нет, может потребоваться альтернативный.
Nginx http2 и включение протокола
Когда имеется в наличии Nginx нужной версии http2 включается очень просто. Название протокола дописывается в директиве listen конфигурационного файла. Ниже пример для случая если рабочим конфигурационным файлом является example:
mcedit /etc/nginx/sites-enabled/example
server {
listen 443 ssl http2;
server_name example.com;
…
}
Затем веб-сервер перезапускается
nginx -s reload
На этом настройка завершена, дополнительно ничего не требуется.
Проверка http2
Проверить доступен ли сайт по HTTP2 можно используя curl
curl -I —http2 http://example.com
Если в выводе присутствует только строка curl: (1) Unsupported protocol — поддержки протокола нет со стороны утилиты и требуется обновление curl, инструкции для каждой системы можно без труда найти в сети. Например, для Ubuntu 16.04
Другим вариантом могут быть онлайн сервисы, позволяющие выполнять такую проверку или, что проще всего, браузер. В инструментах разработчика нужно включить отображение поля «Protocol» и обновить страницу сайта
Браузер покажет используется http1.1 или http2
Отличия HTTP/2 от HTTP1.1
Мультиплексирование
В отличие от HTTP1.1 для каждого запроса не нужно открывать новое TCP соединение. В рамках одного соединения могут передаваться множество файлов. Это значительно снижает количество трафика, передаваемого между клиентом и сервером, увеличивает скорость, а также полностью меняет принципы оптимизации веб-сайтов.
Так, с HTTP2 стили правильнее не объединять в один большой файл style.css, а разделять на несколько документов. Этот же подход актуален для изображений и JS.
Можно назначать приоритеты — например, отдавать HTML, затем PNG, потом Javascript
Шифрование
Возможно использование только защищенного соединения
Сжатие HTTP заголовков
С каждым запросом требуется передавать меньше данных, что отражается на скорости
Серверная инициализация (server push):
Стандартом считается ситуация при которой сервер ожидает запроса от браузера (реактивное поведение). С HTTP2 сервер может сам посылать запросы и помещать в браузерный кэш необходимые данные. Когда они будут запрошены пользователем — контент отдастся максимально быстро.
Читайте про то, как установить SSL сертификат на Nginx.