Поддержка Http2 в Amazon Linux с Apache с OpenSSL 1.0.1

Я пытаюсь запустить веб-сервер http2 на Amazon linux поверх Apache. Насколько я понимаю, для использования Http2 требуется OpenSSL 1.0.2. Однако мой текущий дистрибутив поддерживает только OpenSSL 1.0.1. Я проверил RedHat и то же самое.

Есть ли простой способ сделать это?

-2
задан 10 August 2016 в 12:36
3 ответа

Для начала необходимо понять, что упакованные дистрибутивы обеспечивают стабильность и безопасность по сравнению с последними версиями. Это компромисс, который в большинстве случаев работает хорошо, но оставляет позади последние возможности, такие как HTTP/2.

Крайне важно, что он обычно не оставляет вас позади на заплатках безопасности, так как они обычно переносятся обратно в предыдущие версии , которые легко применяются при запуске обновления (например, при запуске "sudo yum update" на красной шляпе). Поэтому в этом ответе я много скажу о безопасности, а не просто отвечу на ваш вопрос, чтобы вы могли понять, что вас беспокоит.

Далее вам также нужно понять, что HTTP/2 все еще достаточно новый - спецификация была завершена только в мае 2015 года, а реализации для Apache (и Nginx) начали появляться только в конце 2015 года и все еще помечены как экспериментальные в официальной документации. Например, в mod_http2 было внесено много изменений и исправлено множество ошибок, хотя в последнее время этот процесс замедлился, и сейчас он кажется достаточно стабильным. Так что суть в том, что вы хотите не только последнюю версию openssl, но и действительно должны установить последнюю версию Apache, чтобы обеспечить последнюю стабильную и безопасную версию (в частности, версии 2.4.18 - 2.4. 20 имел проблему безопасности в mod_http2 при использовании клиентских сертификатов, например).

Итак, вернемся к проблеме с дистрибутивом, если вам нужны последние возможности для пакета (а HTTP/2 относительно новый, так что учитывается под этим баннером), то у вас есть несколько вариантов:

  1. Сборка из исходных текстов.
  2. Найдите другой rpm или репозиторий, который упаковывает более поздние версии программного обеспечения для вашей операционной системы.
  3. Положите что-нибудь, что действительно поддерживает HTTP/2, перед вашим веб-сервером.

Первые два из них означают выход за рамки официально поддерживаемых пакетных версий и действительно приносят проблемы с безопасностью. Вам нужно будет оставаться в курсе всех ошибок и проблем в этих версиях и делать те же обновления вручную, когда вы считаете это необходимым, так как вы теряете защитную сеть из патчей, поддерживаемых дистрибутивом (которые гораздо проще применить).

Сборка из исходных текстов - это то, как пакеты устанавливались раньше, и это далеко не так сложно, как может показаться некоторым. У меня есть пост в блоге о том, как собрать openssl, nghttp2 и Apache httpd из исходников именно для того, чтобы разрешить HTTP/2, который должен работать на большинстве Linux систем (хотя я не пробовал его на Amazon Linux), но точные параметры конфигурации будут зависеть от того, как вы запустите Apache. Хорошая новость заключается в том, что вы можете установить openssl в отдельном месте только для использования Apache и продолжать использовать старую, поддерживаемую дистрибутивом, версию для остальной части вашей системы. Однако, имейте в виду, что публичный веб-сервер, очевидно, является ключевой потенциальной уязвимостью, и именно на нём вам в идеале хотелось бы запускать упакованную версию! Установка из исходных текстов также обычно требует доступа с правами суперпользователя, и поэтому вводит возможность попадания гнусного кода в вашу систему, так что вам действительно следует загружать исходные тексты только с официальных сайтов и зеркал. Большинство установок с исходными кодами позволяют вам проверить загрузку перед установкой, что рекомендуется. См., например, инструкции Apache по проверке загрузки .

Использование других, неофициальных пакетов (например, с http://rpmfind.net) или репозиториев теоретически должно быть даже проще, чем сборка из исходного кода, но переносит аспект безопасности на доверие тех, кто собирает пакеты или управляет репозиторием. Это влияет на вас не только с точки зрения доверия к тому, что они не изменили код, но и оставляет вам доверие к тому, что они будут продолжать обновлять и поддерживать более новые версии в будущем. Честно говоря, я не большой поклонник по этим причинам и предпочитаю просто устанавливать из исходных текстов, если мне нужен более поздний пакет, но, возможно, это только я.

Последний вариант - поместить что-то перед вашим веб-сервером, который поддерживает http/2 . Это может быть программное или аппаратное обеспечение, как другой вебсервер, балансировщик нагрузки или, возможно, CDN. Cloudflare, например, CDN с отличной поддержкой HTTP/2 и даже свободным планом (обратите внимание, что я не использовал его, но посмотрите другие рекомендации). Недостатком здесь является большая инфраструктура, и вы также можете не хотеть потерять контроль над этим самостоятельно на вашем сервере (серверах).

Немного обдуманно, но надеюсь, что это поможет!

.
3
ответ дан 5 December 2019 в 21:11

Вы можете скомпилировать nginx из исходного кода и использовать его в качестве обратного прокси, так что он будет слушать на порту 443 и обслуживать сгенерированный apache контент с полной поддержкой http2...

Эти простые команды сделают всю работу за вас:

yum -y groupinstall "Development Tools"
yum -y install make yum install gcc gcc-c++ kernel-devel zlib-devel pcre2-devel git
mkdir nginx
cd nginx/
git clone https://github.com/FRiCKLE/ngx_cache_purge.git
git clone https://github.com/maneulyori/nginx-http-auth-digest.git
wget https://github.com/pagespeed/ngx_pagespeed/archive/release-1.11.33.2-beta.zip
unzip release-1.11.33.2-beta.zip
cd ngx_pagespeed-release-1.11.33.2-beta/
wget  https://dl.google.com/dl/page-speed/psol/1.11.33.2.tar.gz
tar -xzvf 1.11.33.2.tar.gz psol/
cd ..
wget http://nginx.org/download/nginx-1.11.3.tar.gz
tar -xzvf nginx-1.11.3.tar.gz
wget https://www.openssl.org/source/openssl-1.0.2h.tar.gz
tar -xzvf openssl-1.0.2h.tar.gz
cd nginx-1.11.3/
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --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-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-cc-opt='-march=native -O2 -pipe'  --with-openssl=../openssl-1.0.2h --add-module=../ngx_pagespeed-release-1.11.33.2-beta --add-module=../nginx-http-auth-digest --add-module=../ngx_cache_purge
make -j 9
make install

Команды, приведенные выше, протестированы на работу с CentOS 7. Если ваш дистрибутив не предоставит вам последнюю версию GCC, конфигурация может не сработать с ошибкой. Пожалуйста, замените строку ./configure (3-я снизу) на эту:

./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --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-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-cc-opt='-march=native -O2 -pipe'  --with-openssl=../openssl-1.0.2h --add-module=../nginx-http-auth-digest --add-module=../ngx_cache_purge

Это не даст вам такого хорошего модуля pagespeed_module, но прекрасно соберет и будет работать под CentOS6+.

.
0
ответ дан 5 December 2019 в 21:11

Выпущена новая версия AMI Amazon Linux (2017.09). В рамках обновления теперь AMI linux использует OpenSSL 1.0.2k, а протокол HTTP / 2 теперь поддерживается AMI httpd24 и nginx. Вы можете обновить свой экземпляр, выполнив эти две команды

sudo yum clean all
sudo yum update

. После этого вы должны перезагрузить свой экземпляр и изменить настройки вашего веб-сервера для работы по протоколу HTTP / 2.

0
ответ дан 5 December 2019 в 21:11

Теги

Похожие вопросы