Настройка http2 в nginx на centos и Vesta
Об обновленном протоколе http2 рассказывать не буду, есть для этого википедия и хабрахабр, поэтому считаю, что вы перед собой поставили цель перевести сайты на новый протокол и знаете для чего это нужно.
Сервер работает со следующим ПО: centos 6.Х, панель управления Vesta, php-fpm и nginx, для домена уже установлен и настроен ssl сертификат.
Большинство инструкций настройки http2 в nginx содержат малоинформативную информацию, которая сводится к добавлению буквоцифр http2 в секцию serverконфигурационного файла nginx. В нашем случае у вас уже имеется сконфигурированный файл snginx.conf для работы домена по защищенному протоколу https, где после ssl всего-то нужно добавить знакомые нам http2, как это указано на скриншоте ниже.
mcedit /home/admin/conf/web/snginx.conf
Далее было бы достаточно выйти из редактирования файла с сохранением и перезапустить nginx (но не в нашем случае)
service nginx restart
Этот способ может быть хорош для других панелей управления сервером или для серверов, где все настроено руками, но даже не пытайтесь с установленным плагином HTTP/2 and SPDY indicator разглядеть синюю молнию. Всему виной OpenSSL 1.0.1e-fips 11 Feb 2013 — библиотека, которая устанавливается с nginx/1.10.1 при инсталляции панели Vesta. Проверить это можно командой
nginx -V
Для исправления проблемы нам понадобится OpenSSL не ниже 1.0.2, а для этого нужно пересобрать nginx. Воспользуемся вышеуказанной командой
[root@132011 ~]# nginx -V
nginx version: nginx/1.10.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/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-file-aio --with-threads --with-ipv6 --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'
Скопируйте и сохраните в текстовом редакторе часть кода, расположенного после configure arguments: до самого конца, он нам понадобится позже.
Установим зависимости
yum install gc gcc gcc-c++ pcre-devel zlib-devel make wget openssl-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel gperftools gperftools-devel libatomic_ops-devel perl-ExtUtils-Embed -y
Перейдем в каталог src
cd /usr/local/src/
Скачаем самую свежую версию openssl и nginx, для этого последовательно вводите и выполняйте следующие команды:
wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.0c.tar.gz
tar -xzvf openssl-1.1.0c.tar.gz
NGINX_VERSION=1.10.2
wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz
tar -xvzf nginx-${NGINX_VERSION}.tar.gz
wget http://hg.nginx.org/njs/archive/1c50334fbea6.zip
unzip 1c50334fbea6.zip
Перейдем в каталог с нашей версией nginx
cd nginx-${NGINX_VERSION}/
Остановим nginx
service nginx stop
Сконфигурируем nginx, для этого возьмите часть кода, которую сохранили вначале и добавим в него три фрагмента (выделены жирным шрифтом):
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/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-file-aio --add-dynamic-module=/usr/local/src/njs-1c50334fbea6/nginx --with-threads --with-ipv6 --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --with-openssl=/usr/local/src/openssl-1.1.0c
Затем поочередно выполним следующие команды
make
make install
Запустим nginx
service nginx start
Теперь проверьте результат командой
nginx -V
После указанных действий даже Google Chrome определит, что ваш сайт отдает контент по новому протоколу http2
В финале отключим обновление nginx командой yum update, так как это может нарушить работу сервера. Теперь рекомендуется обновлять nginx тем же способом, что мы прошли в данной статье. Для этого отключим репозиторий nginx.repo проставив в секции enebled=0, как указано на скриншоте. Подробнее о работе с репозиториями здесь.
mcedit /etc/yum.repos.d/nginx.repo
Выходим из редактирования файла с сохранением. Не уверен, но возможно нужно будет перезапустить nginx.
service nginx restart
Взято отсюда
Автор: igel