Студия веб дизайна, создание сайтов

Сопровождение и техническая поддержка сайтов

10 лет на рынке IT услуг, с нами надежно!

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) и наши труды с лихвой вознаграждены, новыми возможностями нашего веб-сервера.