Debian jessie nginx з openssl 1.0.2 використовувати ALPN, а не NPN


14

Я запускаю debian jessie на своєму сервері і нещодавно оновлений до нового веб-сервера nginx з підтримкою http / 2 (nginx 1.10). Як і сьогодні, він працює чудово, і веб-сервер доставляє контент за допомогою протоколу http2.

Я прочитав, що хром втрачає підтримку 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 розтягування буде opensl 1.0.2. Але до дати випуску майже рік, і хром скоро втратить підтримку, тому я не хочу втрачати перевагу протоколу http2.

Чи є якесь рішення, як встановити openssl 1.0.2 в цій системі, не будуючи власну збірку (неправильне обслуговування) або чекаючи, коли сховище підтримує його? Я також не хочу, щоб у моїй системі були дві версії openssl, якщо одну з них потрібно пов’язати та підтримувати вручну.

Дякуємо за будь-яку допомогу.


Ви можете використовувати apt pinningта використовувати opensslз Debian stretch.
gf_

@gf_ На дуже високий ризик зламати вашу систему. Багато що залежить від OpenSSL.
Майкл Хемптон

@MichaelHampton Ну, я не можу судити про рівень ризику, я сумніваюся, що він дуже високий. Я збираюся з Куртом Roeckx, один з супроводжуючих, який намагався потрапити 1.0.2в jessieтільки незабаром після заморожування (який був відхилений тоді). «Ця версія має бути сумісна з версією 1.0.1 я нічого не чекаю перервати перехід від 1.0.1 до 1.0.2. " (Мені б це було більше відомо libc6.)
gf_

@gf_ "Введення цього" в цьому контексті вимагатиме перекомпілювати все, що використовує OpenSSL. Я не здивований, що це було відхилено; Дебіан любить старе і стабільне. У контексті вашої пропозиції це означає також втягувати кожен розтягнутий пакет, який використовує OpenSSL, і це багато чого.
Майкл Хемптон

@MichaelHampton Я цілком знаю політику Debian, і я не здивований також тому, що тоді це відхилили (не хотів цього говорити чи створювати таке враження). Але: (може бути , моя формулювання невірна): Ведення 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. (Це десять пакунків ..)
gf_

Відповіді:


16

Оновлення 2016/08/08: nginx в jessie-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.

    Покладіть ці рядки всередину:

    deb http://httpredir.debian.org/debian/ stretch main contrib non-free
    deb-src http://httpredir.debian.org/debian/ stretch main contrib non-free
    
    deb http://security.debian.org/ stretch/updates main contrib non-free
    deb-src http://security.debian.org/ stretch/updates main contrib non-free
    
    # stretch-updates, previously known as 'volatile'
    deb http://httpredir.debian.org/debian/ stretch-updates main contrib non-free
    deb-src http://httpredir.debian.org/debian/ stretch-updates main contrib non-free
    
  • Налаштуйте влучне закріплення, щоб переконатися, що ви лише витягуєте пакети, Debian stretchякі ви вказуєте. Файл, який слід використовувати для цього /etc/apt/preferences, знаходиться там:

    Package: *
    Pin: release n=jessie
    Pin-Priority: 900
    
    Package: * 
    Pin: release a=jessie-backports
    Pin-Priority: 500
    
    Package: *
    Pin: release n=stretch
    Pin-Priority: 100
    

    (Можливо, вам доведеться змінити набори та пріоритети, щоб відповідати вашому оточенню.)

  • Запустіть apt-get update(через sudo/ як root), щоб оновити кеш пакету.

  • Встановити nginxз Debian stretch: apt-get install -t stretch nginx(зробити це через sudo/ як root). Прибуток!

  • Як я описав у своїх коментарях, щоб навіть знизити ризики, ви можете використовувати щось на зразок chroot або контейнер-рішення, як LXC . У випадку, якщо ви хочете піти chrootшляхом, вам слід встановити мережевий інтерфейс всередині: Для цього, наприклад, ознайомтеся з цим поштовим блогом , який дає вам ознайомлення network namespaces.

  • Сподіваюся, що це допомагає; у випадку якщо у вас є більше запитань, не соромтесь зв’язатися зі мною. Буду вдячний за відгуки і мене цікавить, як це відбувається.


Сьогодні я встановив nginx за вашим описом відповідей, і все, здається, працює чудово! Єдине, що мені потрібно було зробити додатково, - це видалити стару установку nginx, тому що у мене був nginx 1.10 із сховища nginx, і ця версія не сумісна з пакетом репозиторіїв debian (але я це робив і під час оновлення з debian nginx до 1.10, так що це не було проблемою). Дякую за ваші зусилля та допомогу!
Юрай Немек

@JurajNemec Чудово! Дякую за відгук! Ви вже перевіряли ALPNпідтримку?
gf_

Так. Перевірили це тестом http2 та тестом SSL Labs , обидва твердження, що існує підтримка ALPN. Також nginx -Vдає інформацію про те, що версія компільована з openssl 1.0.2+. Тому я думаю, що це працює правильно.
Юрай Немек

@JurajNemec Чудово, добре звучить! Якщо це можливо для вас, мені було б цікаво отримати невелике оновлення після того, як ви запустили цю установку деякий час, можливо, чотири-вісім тижнів. Спасибі!
gf_

@JurajNemec Здається, Google зробив перемикач і видалив NPN. Чи все ще працює, як очікувалося?
gf_

11

Інший метод - встановити OpenSSL 1.0.2 з jessie-backports і використовувати збірки Ubuntu 16.04 LTS з власного сховища nginx. Таким чином, ви принаймні використовуєте пакет OpenSSL, створений для Джессі.

Додати до /etc/apt/sources.list:

# jessie-backports, from stretch-level but with no dependencies
deb http://httpredir.debian.org/debian/ jessie-backports main contrib non-free
deb-src http://httpredir.debian.org/debian/ jessie-backports main contrib non-free

# Nginx repository - use Ubuntu 16.04 LTS Xenial to get packages compiled with OpenSSL 1.0.2
deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx

Потім запустіть:

apt-get update
apt-get install -t jessie-backports openssl
apt-get install nginx

Це очевидно ставить вас в офіційно непідтримувану конфігурацію, але, можливо, це краще, ніж взагалі не мати пакета - і це працювало для мене. Крім того, використання repo nginx означає, що ви отримуєте нові оновлення.


Чи можете ви, будь ласка, розробити / уточнити, чому можна їхати цим маршрутом? Щодо "Плюс, використання репо nginx означає, що ви отримуєте нові оновлення.": Ви отримуєте "свіжі оновлення", а також використовуєте спосіб, який я описав.
gf_

Пакети nginx оновлюються в той самий день, коли відбудеться їх випуск, оскільки вони є частиною процесу їх випуску, а не процесу випуску Debian. Я включив основні пакети, а не стабільні пакунки, але ви можете отримати стабільний, просто видаливши / основну лінію у вищезазначених шляхах. Що ви віддаєте перевагу, залежить від вас.
GreenReaper

Для розширення вищезазначеного: stretch - це поточний "тестуючий" випуск, і тому він має мінімальну затримку залежно від того, скільки часу потрібно, щоб перейти від тестування ; і це припускаючи, що це перетворює його в нестабільний одразу - наприклад, 1.10.0 було випущено 26 квітня , але було натиснуто на нестабільне 29 квітня і перейшло до розтягування 5 травня ( див. PTS ).
GreenReaper

1
Я цілком усвідомлюю ці факти, дякую. :) Я думаю, що питання зводиться до того, чи потрібні "нові пакети" (тільки тому, що (?)), Якщо намагаються надати стабільні послуги. AFAIK, багато людей вибирають Debian (і це ОС, про яке йде мова), оскільки він стабільний. Існує певний ризик, пов'язаний із запуском нових версій програмного забезпечення. Але в будь-якому випадку, я думаю, немає загального правила того, як можна впоратися з цим, оскільки оточення, очікування та потреби відрізняються. Крім того: Дякую за ваш внесок, я впевнений, що це корисно для людей; мої рядки раніше не означають жодної образи.
gf_

1
Як ви кажете, це питання ступеня. Якщо ви хочете бути на межі, що кровоточить, ви можете складати збірки щодня. У моєму випадку бути принаймні на передовій технології - плюс. ALPN сам по собі, мабуть, не потребує більшості сайтів, але він дуже бажаний тим, хто бажає використовувати HTTP / 2 (особливо якщо раніше у вас це було під час використання NPN); і цю цільову групу також більше цікавить тип особливостей, які спливають у основній nginx до стабільної. Я керую десятьма вузлами кешу, і, як правило, випробую його на меншому, щоб перевірити його під навантаженням, перш ніж виконувати його.
GreenReaper

0

Ще один метод - використовувати jessie-backports, а потім легко перебудувати nginx

додати до /etc/apt/sources.list

deb http://ftp.debian.org/debian jessie-backports main

а потім запустити як root

apt-get update
apt-get install -t jessie-backports openssl

а потім відновіть nginx. Дотримуйтесь інструкцій на https://wiki.debian.org/BuildingAPackage


"[...] Або ви складете для себе, що не хочете робити [...]"
gf_

0

Для мене найпростішим способом виправити це було використання іншого зображення докерів Nginx, див. Офіційну збірку Nginx на Docker Hub . Збірка Docker Nginx за замовчуванням використовує Debian Jessie, щоб не вирішити вашу проблему, але вони також пропонують альтернативну збірку на основі Alpine Linux . Останні його версії використовують OpenSSL 1.0.2!

Таким чином, це рішення передбачає, що ви встановили Docker і прекрасно працюєте з Nginx Alpine Linuxзамість Debian Jessie.

Щоб запустити контейнер Nginx:

sudo docker run --name nginx-container -p 80:80 -p 443:443 -v /path/to/your/nginx/directory/:/etc/nginx/ /path/to/your/files/to/serve/:/usr/share/nginx/html/ -d nginx:1.11-alpine

Коротке пояснення для початку роботи з 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: використовуйте це зображення для запуску контейнера (тут розміщено офіційні зображення Docker Nginx )

Також корисно:

  • використовувати sudo docker exec nginx-container <command>для запуску команди в контейнері, наприклад, sudo docker exec nginx-container nginx -s reloadдля перезавантаження Nginx після зміни файлів конфігурації в хост-системі
  • Або використовуйте sudo docker exec -it nginx-container bashдля введення bash shell в контейнер, щоб ви могли працювати там безпосередньо (не рекомендується, але іноді корисно)

0

Альтернативний спосіб - замість цього використовувати BoringSSL, що не шкодить оточенню OpenSSL. Ось деталі, на які можна посилатися, https://www.admon.org/hardwares/enable-http2-support-for-nginx-on-debian-jessie


1
Відповіді лише на посилання стають менш корисними після закінчення терміну дії посилань. Будь ласка, включіть у відповідь відповідну частину пов’язаної сторінки.
sendmoreinfo

0

У моїй ситуації я використав сховище Dotdeb. Вказівки цього веб-сайту надають можливість додати сховище, яке дозволяє встановити Nginx з “повною” підтримкою HTTP2. Поточна версія 1,14, що на останню малу відстає від останнього випуску, тому ви не будете занадто сильно відставати (поточний репортаж - 1,10).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.