Я использую Debian Jessie на моем сервере и недавно обновлен до нового веб-сервера nginx с поддержкой http / 2 (nginx 1.10). Как и сегодня, он отлично работает, и веб-сервер доставляет контент по протоколу http2.
Я читал, что Chrome сбрасывает поддержку NPN и разрешает ALPN только после 15.5.2016. ALPN - это расширение, для которого требуется установленный openssl 1.0.2, но в Debian jessie - это только openssl 1.0.1 (также для обратных портов debian и других репозиториев, для этого Debian нет версии openssl 1.0.2).
И есть проблема - я перешел с SPDY на http2 и через несколько дней мне придется отключить http2 и не могу использовать SPDY, потому что в этой версии nignx есть только http2. Я также читал, что эта версия Debian будет зависать от openssl 1.0.1, и только Debian Stretch будет иметь OpenSSL 1.0.2. Но до даты релиза почти год, и Chrome скоро прекратит поддержку, поэтому я не хочу терять преимущество протокола http2.
Есть ли какое-либо решение, как установить openssl 1.0.2 в этой системе, не создавая собственную сборку (плохое обслуживание) или не ожидая, пока будет установлен репозиторий backports? Мне также не нужны две версии openssl в моей системе, если одна из них должна быть связана и поддерживаться вручную.
Спасибо за любую помощь.
apt pinning
и использоватьopenssl
изDebian stretch
.1.0.2
вjessie
только вскоре после замораживания (который был отклонен тогда). «Эта версия должна быть совместима с версией 1.0.1 я ничего не жду сломать движение от 1.0.1 до 1.0.2. " (Я бы больше об этом зналlibc6
.)apt-get install -t stretch nginx
(на ванильDebian jessie
сnginx
установлен) будет тянуть в:nginx nginx-common nginx-full libnginx-mod-http-auth-pam libnginx-mod-http-geoip libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream libssl1.0.2
. (Это десять пакетов ..)Ответы:
Обновление 2016/08/08:
nginx
injessie-backports
(версия1.9.10-1~bpo8+3
была построена противopenssl >= 1.0.2~
. Приступая кALPN
работе сейчас, если для запускаjessie
просто требуются пакетыjessie-backports
, больше не нужно извлекать пакеты изstretch
.-
Оригинальный ответ: Ну, вот мой ответ, согласно комментариям: На мой взгляд, на сегодня не так много способов решить эту проблему, 2016/05/09. По сути, вы должны как-то попытаться внедрить современность
nginx
в вашу систему, скомпилированную против>= openssl 1.0.2~
.Единственные два варианта, которые я вижу в настоящее время: либо вы компилируете для себя, чего вы не хотите делать, что вполне понятно, либо вы загружаете современные пакеты из
Debian stretch
вашей системы. Это связано с некоторыми рисками, потому что вы смешиваете стабильную среду с другой, но, на мой взгляд, эти риски довольно низки, потому что вы используетеDebian
.Итак, давайте попробуем это:
Добавьте
Debian stretch
репозиторий в свойapt sources
. Не используйте/etc/apt/sources.list
для этого, но вместо этого используйте выделенный файл внутри,/etc/apt/sources.list.d/
чтобы сохранить его в чистоте, лично я используюstretch.list
.Поместите эти строки внутрь:
Настройка точного закрепления чтобы убедиться, что вы извлекаете только те пакеты, из
Debian stretch
которых вы указываете. Файл, используемый для этого/etc/apt/preferences
, находится там:(Возможно, вам придется изменить наборы и приоритеты в соответствии с вашей средой.)
Запустить
apt-get update
(черезsudo
/ asroot
), чтобы обновить кеш пакета.Установить
nginx
сDebian stretch
:apt-get install -t stretch nginx
(сделать это черезsudo
/ какroot
). Прибыль!Как я описал в своих комментариях, чтобы снизить риски, вы можете использовать что-то вроде chroot или контейнерного решения, такого как LXC . Если вы хотите пойти по этому
chroot
пути, вам нужно настроить сетевой интерфейс внутри: для этого взгляните на этот пост, например , , который содержит введениеnetwork namespaces
.Надеюсь это поможет; если у вас есть еще вопросы, не стесняйтесь связаться со мной. Буду признателен за отзыв, и мне интересно, как оно идет.
источник
ALPN
поддержку?nginx -V
дает информацию, что версия скомпилирована с openssl 1.0.2+. Поэтому я думаю, что это работает правильно.Другой способ - установить OpenSSL 1.0.2 из jessie-backports и использовать сборки Ubuntu 16.04 LTS из собственного репозитория nginx. Таким образом, вы хотя бы используете пакет OpenSSL, созданный для Джесси.
Добавить к
/etc/apt/sources.list
:Затем запустите:
Это, очевидно, помещает вас в официально неподдерживаемую конфигурацию, но, возможно, это лучше, чем отсутствие пакета вообще - и это сработало для меня. Кроме того, использование репозитория nginx означает, что вы получаете свежие обновления.
источник
Другой способ - использовать jessie-backports, а затем легко перестроить nginx.
добавить в /etc/apt/sources.list backports
а затем запустить от имени пользователя root
и затем пересоберите nginx. Следуйте инструкциям на https://wiki.debian.org/BuildingAPackage
источник
Для меня самый простой способ исправить это - использовать другой образ Nginx Docker, см. Официальную сборку Nginx на Docker Hub . В стандартной сборке Docker Nginx используется Debian Jessie, так что это не решит вашу проблему, но они также предлагают альтернативную сборку на основе Alpine Linux . Его последние сборки используют OpenSSL 1.0.2!
Таким образом, это решение предполагает, что вы установили Docker и можете запускать Nginx
Alpine Linux
вместоDebian Jessie
.Чтобы запустить свой контейнер Nginx:
Краткое объяснение, с чего можно начать с Docker:
docker run
: загружает образ Docker (в данном случаеnginx:1.11-alpine
), если у вас его еще нет, и запускает контейнер Docker на основе этого образа--name nginx-container
: присваивает контейнеру Docker имя (вы можете просмотреть все запущенные контейнеры Docker, используяsudo docker ps
или используяsudo docker ps -a
также просмотр остановленных контейнеров)-p 80:80 -p 443:443
: связывает порты 80 и 443 на хост-компьютере с портами 80 и 443 в контейнере Docker соответственно-v /path/to/your/nginx/directory/:/etc/nginx/
: монтирует каталог в вашей хост-системе, который содержит вашу конфигурацию Nginx, в/etc/nginx/
каталог в контейнере Docker/path/to/your/files/to/serve/:/usr/share/nginx/html/
: монтирует каталог на вашей хост-системе, который содержит файлы, которые вы хотите, чтобы Nginx обслуживал-d
: запускает контейнер в фоновом режиме (вы можете остановить использование контейнераdocker stop nginx-container
)nginx:1.11-alpine
: используйте это изображение для запуска вашего контейнера ( официальные изображения Nginx Docker перечислены здесь )Также полезно:
sudo docker exec nginx-container <command>
для запуска команды в контейнере, напримерsudo docker exec nginx-container nginx -s reload
для перезагрузки Nginx после изменения файлов конфигурации в хост-системеsudo docker exec -it nginx-container bash
для ввода оболочки bash в контейнер, чтобы вы могли работать там напрямую (не рекомендуется, но иногда полезно)источник
Альтернативный способ - использовать BoringSSL, что не повредит окружению OpenSSL. Вот подробности, на которые можно сослаться, https://www.admon.org/hardwares/enable-http2-support-for-nginx-on-debian-jessie.
источник
В моей ситуации я использовал репозиторий Dotdeb apt. Инструкции на этом сайте дают возможность добавить репозиторий, который позволяет вам установить Nginx с «полной» поддержкой HTTP2. Текущая версия 1.14, что на одну ступень меньше, чем в последнем выпуске, так что вы не будете слишком далеко позади (текущий бэкпорт 1.10)
источник