HTTP/2 является первым крупным обновлением протокола HTTP с 1997 г. Основная цель HTTP/2 является уменьшение задержки, уменьшить общее количество TCP соединений, таким образом, улучшить скорость загрузки страниц в веб-браузерах. HTTP/2 является обратно совместимым с HTTP/1.1, все приложения семантики HTTP одинаковы, за исключением того, что способ передачи данных через соединение TCP. HTTP/2 использует мультиплексирование и позволяет асинхронные (параллельные) запросы и обеспечивает сжатие данных HTTP заголовков. Кроме того, сервер с поддержкой протокола HTTP/2 позволяет серверу отправлять несколько ответов на один запрос.
Поддержка HTTP/2 не включена в Ubuntu 16.04, ни с Nginx, ни с Apache, так как эта функция считается экспериментальным путем Apache HTTPD, так что это представляется возможным включить его на Ubuntu 14.04, используя команду a2enmod:
a2enmod http2 ERROR: Module http2 does not exist!
Поддержка HTTP/2 ,eltn включена в Ubuntu 16.04 после того, как Apache HTTPD в последующем рассмотрит неэкспериментальную поддержку.
К счастью, модуль http2 включен в источнике, поэтому следующие шаги, помогут включить поддержку HTTP/2 на веб — сервере Apache:
Добавить исходные идентификаторы URI в файл sources.list, если это не было сделано ранее:
vi /etc/apt/sources.list
добавьте следующие строки в конце:
deb-src http://archive.ubuntu.com/ubuntu/ xenial main universe restricted multiverse deb-src http://security.ubuntu.com/ubuntu xenial-security main universe restricted multiverse deb-src http://archive.ubuntu.com/ubuntu/ xenial-updates main universe restricted multiverse
Запустите команду ‘apt-get update’ для загрузки списков пакетов из хранилищ и обновления их, чтобы получить информацию о новейших версиях пакетов, а затем обновите Ubuntu 16.04 с помощью команды ‘apt-get update’:
apt-get update apt-get upgrade
Установите необходимые зависимости:
apt-get install curl devscripts build-essential fakeroot
Создайте нового пользователя для вашего сервера, или переключитесь на существующую учетную запись пользователя:
sudo adduser <имя пользователя> sudo su <имя пользователя>
Замените <имя пользователя> на ваше действительное имя пользователя.
Установите пакет libnghttp2-dev:
[user]$ cd ~ [user]$ sudo apt-get install libnghttp2-dev [user]$ mkdir apache2 [user]$ cd apache2
Загрузите исходный код apache2 на сервер и настройте его:
[user]$ apt-get source apache2 [user]$ sudo apt-get build-dep apache2 [user]$ cd apache-2.4.18 [user]$ sudo apt-get install curl devscripts build-essential fakeroot [user]$ fakeroot debian/rules binary [user]$ sudo cp debian/apache2-bin/usr/lib/apache2/modules/mod_http2.so /usr/lib/apache2/modules/ [user]$ exit
Загрузите модуль HTTP/2. Создайте файл /etc/apache2/mods-available/http2.load и добавьте следующие строки:
LoadModule http2_module /usr/lib/apache2/modules/mod_http2.so <IfModule http2_module> LogLevel http2:info </IfModule>
Включите модуль http2:
a2enmod http2
Добавьте протокол h2 для каждого SSL на основе виртуальных хостов. Например, отредактируйте конфигурационный файл default-ssl:
vi /etc/apache2/sites-enabled/default-ssl.conf
<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost ServerName your-domain.ru Protocols h2 http/1.1 DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost> </IfModule>
Или, добавьте протокол h2 к http/1.1 к основной конфигурации Apache, чтобы позволить http2 на всех веб-сайтах:
vi /etc/apache2/apache2.conf
Добавьте эту строку в конце:
Protocols h2 http/1.1
Перезапустите Apache для того, чтобы изменения вступили в силу:
service apache2 restart
Все. Поддержка HTTP/2 включена на вашем веб-сервере Apache.