# Поддержка HTTP/2 в Plesk

## Обзор

Протокол HTTP/2 (также известный как HTTP/2.0 и HTTP 2.0) – это вторая основная версия сетевого протокола HTTP, используемого в интернет-пространстве. Принятый в мае 2015 г., HTTP/2 был создан в ответ на значительные проблемы производительности HTTP 1.1. О преимуществах этого протокола можно прочитать здесь. В настоящее время HTTP/2 поддерживается большинством основных веб-браузеров.

Поддержка HTTP/2 доступна клиентам Plesk начиная с версии 12.5.30 с обновлением #28, и для нее требуется последняя версия nginx.

Примечание

Поддержка HTTP/2 предоставляется только для SSL-сайтов, не-SSL-сайты продолжат работать по протоколу HTTP/1.x.

## Как включить поддержку HTTP/2 на своем сайте

Удостоверьтесь в том, что веб-сервер nginx обновлен до последней версии и работает. Это можно сделать на страницах Инструменты и настройки > Компоненты сервера и Инструменты и настройки > Управление службами.

Войдите на сервер по SSH как пользователь `root` и включите поддержку HTTP/2 в Plesk с помощью следующей утилиты командной строки:

    # plesk bin http2_pref enable

При выполнении последнего шага ваш веб-сервер nginx будет настроен для использования протокола TLS с новыми и надежными шифрами, вся конфигурация веб-сервера будет пересобрана, а все ваши сайты и сайты ваших клиентов с поддержкой SSL будут перенесены на протокол HTTP/2.

Пожалуйста, при переключении на HTTP/2 проверьте вывод команды на наличие ошибок и предупреждений. При возникновении проблем обратитесь к разделу Устранение неисправностей ниже.

Примечание

Можно просто воспользоваться такой онлайн-службой, как https://tools.keycdn.com/http2-test, чтобы проверить, что HTTP/2 включен на домене.

Чтобы вернуться к протоколу HTTP 1.x и отключить HTTP/2, пожалуйста, используйте следующую команду:

    # plesk bin http2_pref disable

## Поддержка ALPN

Чтобы протокол HTTP/2 правильно работал в Google Chrome, веб-сервер nginx должен поддерживать ALPN (Application-Layer Protocol Negotiation – согласование протокола на уровне приложения). Подробную информацию смотрите в документации к ALPN.

Поддержка ALPN для веб-сервера nginx доступна в Plesk для следующих операционных систем: CentOS 7, RedHat Enterprise Linux 7, Ubuntu 14.04, Ubuntu 16.04 и Debian 8.

Это означает, что HTTP/2 на базе Plesk работает на упомянутых операционных системах во всех современных браузерах.

## Устранение неисправностей

Если у вас возникли проблемы при включении поддержки HTTP/2 для сайта, или проверка сайта с помощью https://tools.keycdn.com/http2-test показала, что включен только протокол HTTP 1.x, выполните следующие шаги, чтобы исправить это поведение.

1. Удостоверьтесь в том, что поддержка SSL включена для сайта в разделе Настройки хостинга домена. Поддержка HTTP/2 предоставляется только для SSL-сайтов, не-SSL-сайты продолжат работать по протоколу HTTP/1.x. Это ограничение со стороны веб-сервера nginx и веб-браузеров.

2. Проверьте, что nginx включен:

       # plesk sbin nginxmng -s

   Включите его при необходимости:

       # plesk sbin nginxmng -e

3. Проверьте, что версия пакета OpenSSL – 1.0.1 или выше:

       # rpm -qa | grep openssl
       openssl-1.0.1e-42.el6_7.4.x86_64.

4. Проверьте, что в `/usr/local/psa/admin/conf/templates/custom/domain/nginxDomainVirtualHost.php` нет шаблона индивидуальной конфигурации. Удалите его, если найдете, и пересоздайте конфигурационные файлы:

       # plesk sbin httpdmng --reconfigure-all

   Или, если вы не хотите удалять свои индивидуальные настройки, можно изменить файл `/usr/local/psa/admin/conf/templates/custom/domain/nginxDomainVirtualHost.php` следующим образом.

   Найдите строку, похожую на:

       ($OPT['default'] ? ' default_server' : '') . ($OPT['ssl'] ? ' ssl' : '') ?>;

   И замените ее двумя следующими строками:

       ($OPT['default'] ? ' default_server' : '') . ($OPT['ssl'] ? ' ssl' : '') .
       ($OPT['ssl'] && $VAR->domain->physicalHosting->proxySettings['nginxHttp2'] ? ' http2' : '') ?>;

   Затем выполните команду:

       # plesk bin http2_pref enable

5. В случае возникновения проблем с SSL-подключением при включенном HTTP/2 удостоверьтесь в том, что значение директивы `ssl_ciphers` в файле `/etc/nginx/conf.d/ssl.conf` или в измененном файле `nginxDomainVirtualHost.php` следующее:

       ssl_ciphers EECDH+AESGCM+AES128:EECDH+AESGCM+AES256:EECDH+CHACHA20:EDH+AESGCM+AES128:EDH+AESGCM+AES256:EDH+CHACHA20:EECDH+SHA256+AES128:EECDH+SHA384+AES256:EDH+SHA256+AES128:EDH+SHA256+AES256:EECDH+SHA1+AES128:EECDH+SHA1+AES256:EDH+SHA1+AES128:EDH+SHA1+AES256:EECDH+HIGH:EDH+HIGH:AESGCM+AES128:AESGCM+AES256:CHACHA20:SHA256+AES128:SHA256+AES256:SHA1+AES128:SHA1+AES256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!KRB5:!aECDH:!EDH+3DES;

6. Если ваш сайт не работает в некоторых браузерах после включения HTTP/2, это может означать, что у вас нет необходимых шифров и протоколов для поддержки HTTP/2. Воспользуйтесь утилитой `sslmng` из Plesk для установки имеющихся протоколов и списка шифров TLS после включения HTTP/2. Например, если вы хотите использовать точно такой же список шифров, какой использует Plesk, команда будет следующей:

       #plesk sbin sslmng --services=nginx --custom --ciphers="EECDH+AESGCM+AES128:EECDH+AESGCM+AES256:EECDH+CHACHA20:EDH+AESGCM+AES128:EDH+AESGCM+AES256:EDH+CHACHA20" --protocols="TLSv1 TLSv1.1 TLSv1.2"

   Конфигурация будет сохранена в файле `/etc/nginx/conf.d/ssl.conf`. Мы не рекомендуем редактировать этот файл вручную.

7. Если описанные выше шаги не помогли, обратитесь в службу технической поддержки Plesk.