Обновление: Метод, представленный ниже, утратил актуальность, так как браузеры больше не поддерживают NPN (Next Protocol Negotiation). Ниже приведён актуальный рабочий способ.
HTTP2 — это обновление протокола HTTP/1.1, которое, как утверждается, значительно увеличивает скорость загрузки веб-страниц. Одним из ключевых преимуществ является способность браузера отправлять множество HTTP-запросов через одно TCP-соединение, что ускоряет процесс.
HTTP2 был создан на основе протокола SPDY. В этом руководстве описывается процесс активации HTTP2 на сервере с Nginx, работающем под управлением Debian 8, а также рассматриваются некоторые особенности работы Nginx. Для детального анализа преимуществ HTTP2 по сравнению с HTTP/1.1 можно ознакомиться с соответствующими материалами.
Можете пропустить этот раздел и перейти к следующему, если вас интересует только включение HTTP2.
Содержание статьи
Установка актуальной версии Nginx на Debian 8 Jessie
Nginx начал поддерживать HTTP2 начиная с версии 1.9.5. В репозитории Debian 8 доступна версия Nginx 1.6.2. Для установки последней версии можно использовать официальный репозиторий Nginx.
Nginx выпускается в двух версиях: stable и mainline. Версия stable считается более проверенной и старой, в то время как mainline представляет собой более современный вариант. Однако это не означает, что mainline менее надежен. По факту, на сайте nginx. org советуют применять версию mainline, если нет веских причин для использования старой версии.
Для установки Nginx mainline на Debian 8, первым шагом необходимо загрузить публичный GPG-ключ Nginx.
wget http://nginx. org/keys/nginx_signing. key
Для импорта ключа в Debian 8 используйте следующую команду:
sudo apt-key add nginx_signing. key
Затем внесите изменения в файл /etc/apt/sources. list.
sudo nano /etc/apt/sources. list
Вставьте эти две строки в нижнюю часть файла.
deb http://nginx. org/packages/mainline/debian/ jessie nginx deb-src http://nginx. org/packages/mainline/debian/ jessie nginx
Для сохранения файла нажмите Ctrl+O, после чего используйте Ctrl+X, чтобы выйти из текстового редактора nano.
При установке Nginx будут автоматически созданы новые конфигурационные файлы. Поэтому рекомендуется заранее создать резервную копию существующих конфигураций. Для этого используйте следующую команду, которая скопирует основной конфигурационный файл и файлы конфигураций серверных блоков в ваш домашний каталог.
cp /etc/nginx/nginx.conf /etc/nginx/sites-available/*.conf /etc/nginx/conf.d/*.conf ~
Если Nginx уже установлен, необходимо его удалить:
sudo apt-get remove nginx nginx-common nginx-full nginx-core
Теперь обновите локальный индекс пакетов и установите основную ветку Nginx.
sudo apt-get update && sudo apt-get install nginx
По окончании установки убедитесь, что у вас установлена нужная версия nginx.
user@www:~$ sudo nginx - v nginx version: nginx/1.11.1
Обзор различных пакетов Nginx.
В системах Debian и Ubuntu доступны каталоги /etc/nginx/sites-available и /etc/nginx/sites-enabled, а также каталог /var/www, который служит стандартным корневым каталогом для документов. Это соответствует устоявшимся практикам веб-сервера Apache.
Тем не менее, официальный дистрибутив Nginx устанавливается…

По мнению мейнтейнера пакетов Debian, управление серверными блоками Nginx можно упростить, если ориентироваться на подход Apache. Достаточно создать или удалить символьную ссылку между каталогами sites-available и sites-enabled.
Я думаю, что отключить серверный блок Nginx так же просто и в папке /etc/nginx/conf.d/. Для этого необходимо просто изменить расширение файла, чтобы оно не заканчивалось на.conf.Например:
sudo mv /etc/nginx/conf.d/example.conf /etc/nginx/conf.d/example.conf.save
После изменения имени файла выполните перезагрузку Nginx, чтобы отключить серверный блок.
sudo service nginx reload или sudo systemctl reload nginx
Если вам по-прежнему необходимы директории sites-available и sites-enabled, вы можете создать их самостоятельно.
sudo mkdir /etc/nginx/sites-avaiable /etc/nginx/sites-enabled
После этого внесите следующую строку в секцию http и перезапустите Nginx.
include /etc/nginx/sites-enabled/*;
После того как вы создадите конфигурационный файл серверного блока в папке sites-available, выполните следующую команду для создания символической ссылки, которая активирует этот серверный блок.
sudo ln - s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/example.conf
Чтобы деактивировать серверный блок, достаточно удалить символьную ссылку, используя команду rm:
sudo rm /etc/nginx/sites-enabled/example.conf
nginx или пользователь www-data?
Учтите, что при официальной установке Nginx серверный процесс запускается под пользователем nginx, а не www-data. Вам необходимо удостовериться, что процесс php-fpm функционирует под тем же пользователем. Проверьте конфигурационный файл пула php www (предполагая, что у вас установлена PHP7).
sudo nano /etc/php/7.0/fpm/pool. d/www.conf
Установите имя учетной записи и группы.
user = www-data group = www-data
Можно заметить, что он функционирует под пользователем www-data. В связи с этим необходимо настроить Nginx для работы с учетной записью www-data.
sudo nano /etc/nginx/nginx.conf
В верхней части данного файла замените пользователя nginx на www-data.
Сохраните файл и закройте его. После этого перезапустите Nginx.
Активация HTTP2 на веб-сервере Nginx.
Спецификация HTTP/2 не требует использования HTTPS. Тем не менее, ведущие веб-браузеры, такие как Firefox, Google Chrome и Edge, поддерживают HTTP/2 только на сайтах с HTTPS. Поэтому вам необходимо получить сертификат TLS/SSL. Вы можете бесплатно оформить сертификат через Let’s Encrypt. Рекомендуем ознакомиться с представленным учебником.
После активации HTTPS на вашем сайте внесите изменения в файл конфигурации вашего серверного блока.
sudo nano /etc/nginx/conf.d/example.conf
sudo nano /etc/nginx/sites-available/example.conf
Для активации HTTP2 достаточно добавить http2 в конец команды listen.
listen 443 ssl;
listen 443 ssl http2;
Сохраните изменения и закройте документ. После этого проверьте настройки nginx.
sudo nginx - t
В случае успешного тестирования перезапустите Nginx.
sudo service nginx reload или sudo systemctl reload nginx
Все готово. Это совсем не сложно!
Как узнать, поддерживает ли ваш сайт протокол HTTP/2?
Вы можете выбрать из следующих методов.
- Зайдите на сайт https://tools.keycdn.com/http2-test и введите название вашего домена.
- Установите расширение для проверки протоколов HTTP/2 и SPDY в браузерах Google Chrome и Firefox.

