В данной записи речь пойдет о настройке поддержки протокола APLN в Nginx. Чтобы понять для чего это все нужно, немного углубимся в тонкости работы HTTP/2. Для переключения с TLS на HTTP/2, браузер и веб-сервер должны выполнить процедуру проверки поддержки соответствующего протокола. До недавнего времени браузер Chrome мог использовать два существующих для этих целей протокола: NPN и APLN. Но связи с тем, что NPN устарел, в Google решили полностью выпилить поддержку этого протокола из Chrome.
Как это касается вас? На данный момент в репозиториях Debian и Ubuntu (и многих других дистрибутивов) находится старая версия OpenSSL. Для работы APLN вам необходим собрать Nginx используя OpenSSL версии 1.0.2 и выше. В противном случае начиная с 31 мая Chrome не сможет использовать HTTP/2 для ваших сайтов.
Проверить поддержку APLN можно на этом сайте. Для поддержки APLN вам понадобится собрать Nginx из исходников. Предварительно нужно указать каталог с исходниками OpenSSL в параметрах сборки Nginx. На момент написания статьи доступна последняя версия OpenSSL 1.0.2h.
Качаем и распаковываем исходники OpenSSL:
cd /usr/src wget https://www.openssl.org/source/openssl-1.0.2h.tar.gz tar -xvzf openssl-1.0.2h.tar.gz
Для Debian замените codename
на кодовое имя дистрибутива, и добавьте в конец файла /etc/apt/sources.list
следующие строки:
deb http://nginx.org/packages/mainline/debian/ codename nginx deb-src http://nginx.org/packages/mainline/debian/ codename nginx
Информацию о том как добавить репозиторий для других дистрибутивов вы можете взять с этой страницы.
Для проверки подлинности подписи репозитория Nginx, скачиваем PGP-ключ и устанавливаем его в связку ключей программы apt:
cd /tmp/ && wget http://nginx.org/keys/nginx_signing.key && apt-key add nginx_signing.key
Для сборки deb-пакета скачиваем с официального репозитория исходники Nginx:
cd /usr/src apt-get source nginx
Для того что бы изменить параметры сборки откройте файл:
nano /tmp/nginx-1.11.1/debian/rules
Нас интересует содержимое секции COMMON_CONFIGURE_ARGS
. Приведите ее содержимое к следующему виду:
COMMON_CONFIGURE_ARGS := \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib/nginx/modules \
--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_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-http_xslt_module=dynamic \
--with-http_image_filter_module=dynamic \
--with-http_geoip_module=dynamic \
--with-http_perl_module=dynamic \
--add-dynamic-module=debian/extra/njs-1c50334fbea6/nginx \
--with-threads \
--with-stream \
--with-stream_ssl_module \
--with-http_slice_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-ipv6 \
$(WITH_HTTP2) \
--with-openssl=/usr/src/openssl-1.0.2h \
--with-cc-opt="$(CFLAGS)" \
--with-ld-opt="$(LDFLAGS)"
После того как все необходимые изменения сделаны, можно начинать компиляцию и сборку пакета:
cd /tmp/nginx-1.11.1 dpkg-buildpackage -rfakeroot -uc -b
Если в процессе не было ошибок, в каталоге /usr/src
мы увидим собранный из исходников deb-пакет nginx_1.11.1-1~jessie_amd64.deb
. Для его установки необходимо выполнить команду:
dpkg -i nginx_1.11.1-1~jessie_amd64.deb