Używam Debiana Jessie na moim serwerze, a ostatnio zaktualizowałem go do nowego serwera WWW Nginx z obsługą http / 2 (Nginx 1.10). Na dzień dzisiejszy działa świetnie, a serwer WWW dostarcza treści za pomocą protokołu http2.
Czytałem, że Chrome upuszcza obsługę NPN i zezwala na ALPN dopiero po 15.5.2016. ALPN jest rozszerzeniem, które wymaga zainstalowanego openssl 1.0.2, ale na debianie jessie jest tylko openssl 1.0.1 (również na backportach debiana i innych repozytoriach, nie ma wersji openssl 1.0.2 dla tego debiana).
I jest problem - zaktualizowałem SPDY do http2 i za kilka dni będę musiał wyłączyć http2 i nie będę mógł używać SPDY, ponieważ ta wersja nignx ma tylko http2. Przeczytałem również, że ta wersja debiana utknie w openssl 1.0.1 i tylko debian stretch będzie miał openssl 1.0.2. Ale data premiery jest już prawie rok, a Chrome niedługo będzie obsługiwać, więc nie chcę tracić korzyści z protokołu http2.
Czy jest jakieś rozwiązanie, jak zainstalować openssl 1.0.2 w tym systemie, bez budowania własnej kompilacji (zła konserwacja) lub oczekiwania na repozytorium backports, aby je mieć? Nie chcę też dwóch wersji openssl w moim systemie, jeśli jedna z nich musi być połączona i obsługiwana ręcznie.
Dziękuję za wszelką pomoc.
apt pinning
i użyćopenssl
zDebian stretch
.1.0.2
w życiejessie
wkrótce po zawieszeniu się (które wtedy zostało odrzucone): „Ta wersja powinna być kompatybilna z wersją 1.0.1. Nie oczekuję niczego przełamać przejście z wersji 1.0.1 na 1.0.2. ” (Byłbym bardziej świadomylibc6
.)apt-get install -t stretch nginx
(na waniliiDebian jessie
znginx
zainstalowana) będzie ciągnąć w: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
. (To jest dziesięć paczek ..)Odpowiedzi:
Aktualizacja 2016/08/08:
nginx
injessie-backports
(wersja1.9.10-1~bpo8+3
została zbudowana przeciwkoopenssl >= 1.0.2~
. RozpoczęcieALPN
pracy, jeśli uruchomieniejessie
wymaga tylko wyłączenia pakietówjessie-backports
, nie trzeba już ich wyciągaćstretch
.-
Oryginalna odpowiedź: Cóż, oto moja odpowiedź, zgodnie z komentarzami: Moim zdaniem, nie ma zbyt wielu sposobów na rozwiązanie tego na dziś, 2016/05/09. Zasadniczo musisz spróbować w jakiś sposób wprowadzić nowoczesność
nginx
do swojego systemu, w zestawieniu z>= openssl 1.0.2~
.Jedyne dwie opcje, które obecnie widzę: albo kompilujesz dla siebie, czego nie chcesz robić, co jest całkiem zrozumiałe, albo wyciągasz z systemu nowoczesne pakiety
Debian stretch
. Wiąże się to z pewnym ryzykiem, ponieważ mieszasz stabilne środowisko z innym, ale moim zdaniem ryzyko to jest dość niskie, ponieważ używaszDebian
.Więc chodźmy i wypróbujmy to:
Dodaj
Debian stretch
repozytorium do swojegoapt sources
. Nie używaj/etc/apt/sources.list
do tego, ale zamiast tego użyj dedykowanego pliku,/etc/apt/sources.list.d/
aby utrzymać go w czystości, osobiście używamstretch.list
.Umieść tam te linie:
Skonfiguruj apt pin, aby upewnić się, że pobierasz tylko pakiety, z
Debian stretch
których określasz. Plik, który ma być użyty do tego/etc/apt/preferences
, znajduje się tam:(Być może będziesz musiał zmienić pakiety i priorytety, aby dopasować je do swojego środowiska).
Uruchom
apt-get update
(przezsudo
/ asroot
), aby zaktualizować pamięć podręczną pakietu.Zainstaluj
nginx
zDebian stretch
:apt-get install -t stretch nginx
(zrób to za pomocąsudo
/ asroot
). Zysk!Jak opisałem w moich komentarzach, aby nawet zmniejszyć związane z tym ryzyko, możesz użyć czegoś takiego jak chroot lub rozwiązanie kontenerowe, takie jak LXC . Jeśli chcesz iść po
chroot
swojemu, musisz skonfigurować interfejs sieciowy wewnątrz: Aby to zrobić, spójrz na przykład na tego posta na blogu , który zawiera wprowadzenienetwork namespaces
.Mam nadzieję że to pomoże; jeśli masz więcej pytań, skontaktuj się ze mną. Byłbym wdzięczny za opinie i jestem zainteresowany tym, jak to idzie.
źródło
ALPN
już wsparcie?nginx -V
Daje również informację, że wersja jest skompilowana z openssl 1.0.2+. Myślę więc, że działa poprawnie.Inną metodą jest instalacja OpenSSL 1.0.2 z jessie-backports i użycie kompilacji Ubuntu 16.04 LTS z własnego repozytorium nginx. W ten sposób korzystasz przynajmniej z pakietu OpenSSL zbudowanego dla Jessie.
Dodaj do
/etc/apt/sources.list
:Następnie uruchomić:
To oczywiście wprowadza cię w oficjalnie nieobsługiwaną konfigurację, ale być może jest to lepsze niż brak pakietu - i zadziałało dla mnie. Ponadto korzystanie z repozytorium nginx oznacza, że otrzymujesz nowe aktualizacje.
źródło
Inną metodą jest użycie jessie-backports, a następnie łatwa odbudowa nginx
dodaj do backportów /etc/apt/sources.list
a następnie uruchom jako root
a następnie odbuduj nginx. Postępuj zgodnie z instrukcjami na https://wiki.debian.org/BuildingAPackage
źródło
Dla mnie najprostszym sposobem, aby to naprawić, było użycie innego obrazu Dginer Nginx, zobacz oficjalną wersję Nginx na Docker Hub . Domyślna kompilacja Docker Nginx korzysta z Debian Jessie, więc nie rozwiąże problemu, ale oferuje także alternatywną kompilację opartą na systemie Alpine Linux . Najnowsze wersje używają OpenSSL 1.0.2!
To rozwiązanie zakłada zatem, że zainstalowałeś Docker i nie przeszkadza ci uruchamianie Nginx
Alpine Linux
zamiastDebian Jessie
.Aby uruchomić swój kontener Nginx:
Krótkie wyjaśnienie na początek w Docker:
docker run
: pobiera obraz Dockera (w tym przypadkunginx:1.11-alpine
), jeśli jeszcze go nie masz i uruchamia kontener Docker na podstawie tego obrazu--name nginx-container
: nadaje nazwę kontenerowi Docker (możesz wyświetlić wszystkie działające kontenery Docker za pomocąsudo docker ps
lub użyć,sudo docker ps -a
aby wyświetlić również zatrzymane kontenery)-p 80:80 -p 443:443
: wiąże porty 80 i 443 na hoście z odpowiednio portami 80 i 443 w kontenerze Docker-v /path/to/your/nginx/directory/:/etc/nginx/
: montuje katalog w systemie hosta, który zawiera konfigurację Nginx, do/etc/nginx/
katalogu w kontenerze Docker/path/to/your/files/to/serve/:/usr/share/nginx/html/
: montuje katalog w systemie hosta, który zawiera pliki, które Nginx ma udostępnić-d
: uruchamia kontener w tle (można go zatrzymać za pomocądocker stop nginx-container
)nginx:1.11-alpine
: użyj tego obrazu, aby rozpocząć kontener ( oficjalne obrazy doków Nginx są wymienione tutaj )Przydatne również:
sudo docker exec nginx-container <command>
aby uruchomić polecenie w kontenerze, na przykład,sudo docker exec nginx-container nginx -s reload
aby ponownie załadować Nginx po zmianie plików konfiguracyjnych w systemie hostasudo docker exec -it nginx-container bash
aby wprowadzić powłokę bash do kontenera, abyś mógł tam pracować bezpośrednio (niezalecane, ale czasem przydatne)źródło
Alternatywnym sposobem jest użycie zamiast tego BoringSSL, co nie szkodzi otoczeniu OpenSSL. Oto szczegóły, na które można się powołać, https://www.admon.org/hardwares/enable-http2-support-for-nginx-on-debian-jessie
źródło
W mojej sytuacji korzystałem z repozytorium apt Dotdeb. Instrukcje na tej stronie dają opcję dodania repozytorium, które pozwala zainstalować Nginx z „pełną” obsługą HTTP2. Obecna wersja to 1.14, co jest jedną drobną różnicą w stosunku do ostatniego wydania, więc nie będziesz zbyt daleko w tyle (obecne backport to 1.10).
źródło