Завершение разработки протокола HTTP/2 стало первым крупным обновлением HTTP за последние 16 лет. При проектировании HTTP/2 основной фокус был направлен на оптимизацию алгоритмов передачи данных и ускорение загрузки страниц.
В качестве основы для HTTP/2 был взят уже существующий открытый протокол SPDY/3, первую версию которого Google представила в 2009 году. Согласно планам, HTTP/2 должен быстро вытеснить протокол SPDY, став его эволюционным продолжением. Уже в начале 2016 года Google планирует полностью перейти на новый стандарт и отказаться от поддержки SPDY в браузере Chrome.
Недавно была представлен тестовая версия модуля HTTP/2 для Nginx. В данный момент доступна альфа версия патча. Полную поддержку протокола HTTP/2 планируется ввести к концу этого года, а пока все желающие могут протестировать его в своих проектах.
Для сборки Nginx с поддержкой HTTP/2 необходим NGINX 1.9.0 и OpenSSL 1.0.2 или новее.
Добавим в /etc/apt/sources.list
официальный репозиторий для mainline-ветки Nginx:
deb http://nginx.org/packages/mainline/debian/ codename nginx deb-src http://nginx.org/packages/mainline/debian/ codename nginx
Скачиваем и устанавливаем PGP-ключ, затем обновляем индекс пакетов apt:
cd /tmp/ && wget http://nginx.org/keys/nginx_signing.key && apt-key add nginx_signing.key apt-get update
Скачиваем необходимые для компиляции и сборки пакета программы, устанавливаем зависимости необходимые для Nginx:
apt-get install dpkg-dev apt-get build-dep nginx
Скачиваем исходники Nginx:
cd /tmp apt-get source nginx
Страница с патчами HTTP/2 для Nginx. Скачиваем патч HTTP/2 для нашей версии Nginx, проверяем возможность применения и если нет ошибок, по устанавливаем патч:
cd /tmp/nginx-1.9.3 wget http://nginx.org/patches/http2/patch.http2.txt patch -p1 --dry-run < patch.http2.txt patch -p1 < patch.http2.txt
Скачиваем и распаковываем исходники OpenSSL:
cd /tmp wget https://openssl.org/source/openssl-1.0.2d.tar.gz tar ixzvf openssl-1.0.2d.tar.gz
Перед началом сборки и компиляции необходимо внести изменения в файл:
nano /tmp/nginx-1.9.3/debian/rules
В секциях override_dh_auto_build
и configure_debug
необходимо удалить строку $(WITH_SPDY)
и добавить в конец следующие опции:
--with-http_v2_module --with-openssl=/tmp/openssl-1.0.2
Для примера привожу фрагмент с изменениями из моего файла:
override_dh_auto_build: dh_auto_build mv objs/nginx objs/nginx.debug CFLAGS="" ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_gzip_static_module --with-threads --with-file-aio --with-cc-opt="$(CFLAGS)" --with-ld-opt="$(LDFLAGS)" --with-ipv6 --with-http_v2_module --with-openssl=/tmp/openssl-1.0.2 dh_auto_build
После чего выполняем компиляцию и сборку deb-пакета:
cd /tmp/nginx-1.9.3 dpkg-buildpackage -rfakeroot -uc -b
После сборки пакета, установим Nginx командой:
dpkg -i nginx_1.9.3-1~jessie_i386.deb
Для включения поддержки HTTP/2 добавьте в конфигурационный файл Nginx вашего сайта параметры ssl и http2 к директивам listen:
server { listen 443 ssl http2 default_server; ssl_certificate server.crt; ssl_certificate_key server.key; ... }
На момент написания статьи в браузерах не реализована поддержка HTTP/2 без SSL шифрования, поэтому параметр ssl является обязательным. Как вариант — можно создать самоподписанный сертификат.
На данный момент статья частично потеряла свою актуальность, Начиная с версии Nginx 1.9.5 присутствует встроенная поддержка протокола. Информация о том как включить HTTP/2 в Nginx.