CentOS 7 пересобрать Nginx с поддержкой OpenSSL 1.0.2h
Поддержка протокола HTTP/2 заметно увеличивает скорость загрузки веб-сайтов и переходить на него, в данный момент, рекомендуется всем владельцам сайтов. Подавляющее большинство современных браузеров, обеспечивают поддержку нового протокола по умолчанию, кроме того HTTP/2 обратно совместим с протоколом HTTP/1.1, так что не бойтесь потерять потенциальных посетителей вашего сайта, старые браузеры тоже будут работать. Приведем краткую выдержку из официального мануала Nginx:
Чтобы принимать HTTP/2-соединения по TLS, необходимо наличие поддержки расширения “Application-Layer Protocol Negotiation” (ALPN) протокола TLS, появившейся лишь в OpenSSL версии 1.0.2. Работа расширения “Next Protocol Negotiation” (NPN) протокола TLS (поддерживаемого начиная с OpenSSL версии 1.0.1) в данном случае не гарантируется.
Пока еще не все операционные системы, поддерживают OpenSSL 1.0.2 по умолчанию и поэтому при установке Nginx например через возможности ISPmanager 5, мы получаем сборку Nginx с OpenSSL 1.0.1, что не есть хорошо. Вот и мы столкнулись с подобным вопросом, при настройке сервера на базе CentOS 7 и на данном конкретном примере, мы покажем как обновить Nginx, чтобы обеспечить полную поддержку протокола HTTP/2. Если собирать веб-сервер минуя ISPmanager 5, можно получить массу сюрпризов и глюков панели, а это нам совсем не нужно. Поэтому сперва установим Nginx в Возможностях ISPmanager и только затем будем приступать к его обновлению.
Итак немного практики, у нас есть в наличии
- CentOS 7
- ISPmanager 5
- И большое желание получить HTTP/2 с поддержкой ALPN
Чтобы не возникло проблем с ISPmanager 5, мы просто заменим уже установленный Nginx. Первым делом устанавливаем все необходимые компоненты:
yum -y groupinstall 'Development Tools' yum -y install openssl-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel
Далее создаем новый каталог и загружаем OpenSSL 1.0.2h с официального сайта
mkdir -p /opt/lib wget https://www.openssl.org/source/openssl-1.0.2h.tar.gz -O /opt/lib/openssl-1.0.2h.tar.gz tar -zxvf /opt/lib/openssl-1.0.2h.tar.gz -C /opt/lib
Загружаем и устанавливаем Nginx 1.11.2
rpm -ivh http://nginx.org/packages/mainline/centos/7/SRPMS/nginx-1.11.2-1.el7.ngx.src.rpm
После этого перекомпилируем установленный Nginx, с библиотекой OpenSSL 1.0.2h, процесс может занять довольно много времени, если у вас малый объем оперативной памяти и небольшая мощность процессора, так что запаситесь терпением и просто немного подождите.
sed -i "s|--with-http_ssl_module|--with-http_ssl_module --with-openssl=/opt/lib/openssl-1.0.2h|g" /root/rpmbuild/SPECS/nginx.spec rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
И наконец устанавливаем собранный нами Nginx
rpm -Uvh /root/rpmbuild/RPMS/x86_64/nginx-1.11.2-1.el7.centos.ngx.x86_64.rpm
Проверим что у нас получилось
[root@server ~]# nginx -V nginx version: nginx/1.11.2 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) built with OpenSSL 1.0.2h 3 May 2016 TLS SNI support enabled
Собственно вот и весь процесс, в итоге мы получили Nignx с поддержкой HTTP/2 (ALPN) и наши труды с лихвой вознаграждены, новыми возможностями нашего веб-сервера.