Статья обновлена 12 февраля, 2023
Как установить и настроить http/2 с openssl в Nginx на Centos 7 с панелью управления VestaCP
В этой детальной инструкции рассмотрена установка http/2 с openssl в VestaCP с Centos 7. Дело в том, что обычное подключение современного протокола http/2 в конфигурационном файле Nginx с панелью VestaCP не работает.
Я и сам долгое время не мог понять по какой причине протокол не работает, подключенный стандартным образом, типа ssl http2 в конфиге Nginx. А дело в том, что при установки VestaCP пакет Nginx устанавливается со старым openssl, версии 1.0.2. И с этим устаревшим пакетом современный протокол работать не будет.
Необходимо пересобрать Nginx с новым openssl и подключить http/2. Правильная установка необходимых пакетов даст значительный прирост в скорости загрузки страниц Вашего сайта.
Пред началом данной операции проверьте свой сайт на двух сервисах. Первый проверяет работу и подключение протокола http/2 (просто перейдите по ссылке, откроется в новом окне и вставьте свой домен).
https://tools.keycdn.com/http2-test
Второй, работу и правильное подключение SSL сертификата.
https://www.ssllabs.com/ssltest/
Проверьте свою версию Nginx и openssl вызвав команду:
nginx -V
Установка http/2 с openssl 3.0.1 в Nginx на Centos 7 с панелью управления VestaCP
Если ранее Вы не осуществляли установку дополнительных модулей в Nginx, то дополнительные расширения устанавливаются через пересборку самого Nginx. То есть необходимо скачать дистрибутив именно той версии, которая указана в Вашем случаи при проверки версии.
В данной инструкции используется версия nginx-1.20.2, если у Вас другая версия, то Вам необходимо поменять цифры пакета на свои. Я так же не рекомендую удалять скаченный и распакованный пакет Nginx. Он пригодится для установки других расширений.
Для работы протокола http/2 и openssl 3.0.1 требуется установить дополнение для ПЕРЛа. Запускаем терминал, заходим на свой сервер и вводим команду:
sudo yum install libtool perl-core zlib-devel -y
Если будет запрос подтверждения, то вводим y (в английской раскладке).
Установка будет производится в папку /usr/src. В терминале переходим в установочную папку, вводим команду:
cd /usr/src
Нам нужно скачать сам пакет openssl 3.0.1. На момент написания статьи, самый новый. Проверьте на официальном сайте. Нужна именно стабильная последняя версия.
Итак, скачиваем, вводим команду:
wget https://www.openssl.org/source/openssl-3.0.1.tar.gz
Далее распаковываем скачанный архив и сам архив удаляем, он больше не нужен. Вводим команду:
tar -zxvf openssl-*.tar.gz && \rm openssl-*.tar.gz
Теперь необходимо установить зависимости, вводим по очереди, следующие две команды:
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
Если команда wget не срабатывает, значит у Вас не установлен данный пакет. Его нужно до установить, выполнив команду:
sudo yum install wget
После установки повторить вторую команду из предыдущего шага.
Проверяем версию nginx
nginx -V
В терминале необходимо скопировать всю конфигурацию, найдите фразу configure arguments: и начиная с —prefix=/etc/nginx скопируйте все, как показано на скрине и сохраните куда нибудь в текстовый файл. Эта информация понадобится позже.
Переходим в каталог: cd /usr/src
Теперь необходимо установить необходимый репозиторий Nginx, в моем случаи это nginx-1.20.2, если у Вас другая версия, то нужно установить свою, указанную при проверке версии.
wget http://nginx.org/download/nginx-1.20.2.tar.gz
Распаковываем скаченный архив следующей командой:
tar zxvf nginx-1.20.2.tar.gz
Переходим в папку со скаченной и распакованной версией Nginx:
cd nginx-1.20.2
Выполняем конфигурацию: Добавляем к скопированному конфигу в самый конец —with-openssl=/usr/src/openssl-3.0.1 и в начало ./configure (обязательно должны быть пробелы), жмем энтер.
Конфигурируется долго 15-40 минут.
Пример команды конфигурирования (Вам нужно ввести свою).
./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-compat --with-file-aio --with-threads --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_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --with-openssl=/usr/src/openssl-3.0.1
Далее, после компиляции вводим:
make
Тоже ждем долго.
Далее:
make install
Перезапускаем nginx:
nginx -s reload
Далее:
nginx -V
ВУАЛЯ — все работает. В nginx должен высветится новый openssl-3.0.1.
Настройка http/2 с openssl 3.0.1 в Nginx на Centos 7 с панелью управления VestaCP
Для работы нового функционала, добавляем параметры в /etc/nginx/nginx.conf (в секцию http):
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-256-GCM-SHA384:ECDHE:!COMPLEMENTOFDEFAULT;
ssl_stapling on;
Старую запись ssl_ciphers или закомментируйте знаком # или удалите.
Проверяем конфигурацию на ошибки и перезапускаем nginx:
nginx -t
Если все сделали правильно и ошибок нет, то перезапускаем nginx командой:
nginx -s reload
Открываем свой сайт в последней версии chrome и проверяем с помощью dev tools.
Перейдите на сайт https://tools.keycdn.com/http2-test и протестируйте свой проект.
Вы должны получить поддержку нового протокола http/2.
Перейдите на сайт https://www.ssllabs.com/ssltest/ и проверьте свой сайт на работоспособность SSL сертификата.
P. S.
Надеюсь мне удалось рассказать в данной инструкции как грамотно осуществляется установка http/2 с openssl в VestaCP с Centos 7.
Понравился материал? Подписывайтесь на наш блог.
Только полезная информация и реальные кейсы