Включаем поддержку http2 на сервере с nginx и Debian

HTTP/2 — это вторая версия сетевого протокола http, включающая в себя множество различных улучшений. В их числе мультиплексирование запросов (все запросы могут быть обработаны параллельно), увеличение производительности, сжатие заголовков и т.д.

Включаем поддержку http2 на сервере с nginx и Debian

HTTP/2 пришёл на смену SPDY, разработка которого прекращена.

Nginx поддерживает протокол http/2, начиная с версии 1.9.5. Однако, в стабильном выпуске Debian Jessie присутствует только версия 1.6.2. Поэтому подключим репозиторий backports, чтобы обновить nginx до 1.9.10.

Перед обновлением необходимо узнать, какие именно пакеты nginx установлены в системе (а их несколько). Смотрим вывод команды:

# dpkg -l | grep nginx

У меня на сервере он такой:

root@rusadmin:~# dpkg -l | grep nginx ii  nginx-common 1.6.2-5+deb8u1 all small, powerful, scalable web/proxy server - common files ii  nginx-extras 1.6.2-5+deb8u1 i386 nginx web/proxy server (extended version)

Значит, мне следует обновить эти пакеты. Что я и сделал.

# aptitude install nginx-common nginx-extras openssl -t jessie-backports

Здесь после ключа -t указываем репозиторий jessie-backports.

OpenSSL версии 1.0.2 мы устанавливаем для поддержки ALPN.

Включаем http/2 для виртуального хоста

В конфигурационном файле всех ваших сайтов, поддерживающих ssl, (если вы используете раздельные файлы для виртуальных хостов в папке /etc/nginx/sites-enabled) или же в главном конфигурационном файле /etc/nginx/nginx.conf находим параметр listen.

Обычно, этот параметр выглядит так:

listen 443 ssl;

Если включён spdy, то так:

listen 443 ssl spdy;

В первом случае нужно просто добавить после ssl параметр http2. Во втором — заменить spdy на http2. В итоге должно получиться это:

listen 443 ssl http2;

Параметр ssl_prefer_server_ciphers приводим к значению off.

Или же привести список доступных шифров к соответствию с чёрным списком RFC 7540, Appendix A.

ssl_ciphers EECDH:EDH:!3DES:!DES:!DSS:!SEED:!CAMELLIA:!NULL:!RC4:!SHA;

После всех внесённых изменений следует протестировать конфигурацию командой nginx -t.

В случае успешного тестирования, перезапускаем nginx и идём на ssllabs.com тестировать сервер. Также можно воспользоваться дополнением SPDY indicator для Firefox.