Ich verwende debian jessie auf meinem Server und habe kürzlich ein Upgrade auf einen neuen nginx-Webserver mit http / 2-Unterstützung (nginx 1.10) durchgeführt. Wie heute funktioniert es hervorragend und der Webserver liefert Inhalte mit dem http2-Protokoll.
Ich habe gelesen, dass Chrome die NPN-Unterstützung einstellt und ALPN erst nach dem 15.5.2016 zulässt. ALPN ist eine Erweiterung, für die openssl 1.0.2 installiert sein muss, aber unter debian ist jessie nur openssl 1.0.1 (auch unter debian-backports und anderen repositories gibt es keine openssl 1.0.2-version für dieses debian).
Und da ist das Problem - ich habe ein Upgrade von SPDY auf http2 durchgeführt und in wenigen Tagen muss ich http2 ausschalten und kann SPDY nicht verwenden, da diese Version von nignx nur http2 hat. Ich habe auch gelesen, dass diese Version von Debian bei OpenSSL 1.0.1 bleiben wird und nur Debian Stretch OpenSSL 1.0.2 haben wird. Aber zum Veröffentlichungsdatum ist es fast ein Jahr und Chrome wird bald den Support einstellen, sodass ich den Vorteil des http2-Protokolls nicht verlieren möchte.
Gibt es eine Lösung, wie Sie openssl 1.0.2 auf diesem System installieren können, ohne ein eigenes Build (schlechte Wartung) zu erstellen oder darauf zu warten, dass das Backports-Repository es hat? Ich möchte auch nicht zwei Versionen von openssl auf meinem System, wenn eine von ihnen manuell verknüpft und gepflegt werden muss.
Danke für jede Hilfe.
apt pinning
und verwendenopenssl
ausDebian stretch
.1.0.2
injessie
nur kurz nach dem Einfrieren (der damals abgelehnt wurde). „Diese Version soll mit der 1.0.1 - Version kompatibel sein , die ich erwarte nichts von 1.0.1 auf 1.0.2 verschieben zu brechen. " (Ich wäre mir dessen bewussterlibc6
.)apt-get install -t stretch nginx
(auf einer VanilleDebian jessie
mitnginx
installiert) wird in ziehen: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
. (Dies sind zehn Pakete ..)Antworten:
Update 08.08.2016:
nginx
injessie-backports
(Version1.9.10-1~bpo8+3
wurde gegen gebautopenssl >= 1.0.2~
.ALPN
Jetzt zum Laufen zu kommen,jessie
erfordert nur das Herausziehen der Pakete, esjessie-backports
ist nicht mehr nötig, die Pakete herauszuziehenstretch
.-
Originale Antwort: Nun, hier ist meine Antwort laut den Kommentaren: Meiner Meinung nach gibt es ab heute, dem 09.05.2016, nicht so viele Möglichkeiten, dies zu lösen. Grundsätzlich muss man irgendwie versuchen , eine moderne
nginx
in Ihr System zu bekommen , gegen die kompiliert wird>= openssl 1.0.2~
.Die einzigen zwei Optionen, die ich derzeit sehe: Entweder kompilieren Sie für sich selbst, was Sie nicht tun möchten, was durchaus verständlich ist, oder Sie ziehen moderne Pakete aus
Debian stretch
Ihrem System heraus. Dies birgt einige Risiken, da Sie eine stabile Umgebung mit einer anderen mischen, aber meiner Meinung nach sind diese Risiken ziemlich gering, da Sie verwendenDebian
.Also, lass uns das ausprobieren:
Fügen Sie das
Debian stretch
Repository zu Ihrem hinzuapt sources
. Verwenden Sie/etc/apt/sources.list
dies nicht, sondern verwenden Sie stattdessen eine dedizierte Datei/etc/apt/sources.list.d/
, um sie sauber zu halten, die ich persönlich verwendestretch.list
.Setzen Sie diese Zeilen dort hinein:
Richten Sie apt pinning ein , um sicherzustellen, dass nur Pakete eingezogen werden, für
Debian stretch
die Sie Angaben machen . Die dafür zu verwendende Datei enthält/etc/apt/preferences
:(Möglicherweise müssen Sie die Suites und Prioritäten ändern, um sie an Ihre Umgebung anzupassen.)
Führen Sie
apt-get update
(viasudo
/ asroot
) aus, um den Paket-Cache zu aktualisieren.Installieren
nginx
vonDebian stretch
:apt-get install -t stretch nginx
(mache dies übersudo
/ alsroot
). Profitieren!Wie ich in meinen Kommentaren beschrieben habe, könnten Sie, um die damit verbundenen Risiken noch zu verringern, so etwas wie eine Chroot oder eine Container-Lösung wie LXC verwenden . Wenn Sie den
chroot
Weg gehen möchten , müssen Sie dort eine Netzwerkschnittstelle einrichten: Schauen Sie sich dazu zum Beispiel diesen Blogpost an , der eine Einführung in gibtnetwork namespaces
.Hoffe das hilft; Wenn Sie weitere Fragen haben, können Sie mich gerne kontaktieren. Ich würde mich über Feedback freuen und bin daran interessiert, wie es geht.
quelle
ALPN
bereits nach Unterstützung gesucht?nginx -V
Gibt auch Infos, dass die Version mit openssl 1.0.2+ kompiliert ist. Also ich denke, dass es richtig funktioniert.Eine andere Methode ist die Installation von OpenSSL 1.0.2 aus jessie-backports und die Verwendung von Ubuntu 16.04 LTS-Builds aus dem nginx-eigenen Repository. Auf diese Weise verwenden Sie zumindest ein OpenSSL-Paket, das für Jessie erstellt wurde.
Hinzufügen zu
/etc/apt/sources.list
:Dann renne:
Dies versetzt Sie offensichtlich in eine offiziell nicht unterstützte Konfiguration, aber vielleicht ist es besser, überhaupt kein Paket zu haben - und es hat bei mir funktioniert. Wenn Sie das Repo von Nginx verwenden, erhalten Sie außerdem neue Updates.
quelle
Eine andere Methode besteht darin, Jessie-Backports zu verwenden und dann einfach Nginx neu zu erstellen
Fügen Sie zu /etc/apt/sources.list backports hinzu
und dann als root ausführen
und dann Nginx neu erstellen. Befolgen Sie die Anweisungen auf https://wiki.debian.org/BuildingAPackage
quelle
Für mich war es die einfachste Möglichkeit, dies zu beheben, ein anderes Nginx Docker-Image zu verwenden. Weitere Informationen finden Sie im offiziellen Nginx-Build auf Docker Hub . Der Standard-Build von Docker Nginx verwendet Debian Jessie, damit Ihr Problem nicht behoben wird. Sie bieten jedoch auch einen alternativen Build auf Basis von Alpine Linux . Die neuesten Builds verwenden OpenSSL 1.0.2!
Diese Lösung geht also davon aus, dass Sie Docker installiert und sind gut mit Nginx läuft auf
Alpine Linux
stattDebian Jessie
.So starten Sie Ihren Nginx-Container:
Kurze Erklärung zum Einstieg in Docker:
docker run
: Lädt das Docker-Image herunter (in diesem Fallnginx:1.11-alpine
), wenn Sie es noch nicht haben, und startet einen Docker-Container, der auf diesem Image basiert--name nginx-container
: gibt dem Docker-Container einen Namen (Sie können alle laufenden Docker-Container anzeigen, indem Sie verwendensudo docker ps
oder verwenden,sudo docker ps -a
um auch angehaltene Container anzuzeigen)-p 80:80 -p 443:443
: Bindet die Ports 80 und 443 auf Ihrem Hostcomputer an die Ports 80 und 443 im Docker-Container-v /path/to/your/nginx/directory/:/etc/nginx/
: Hängt das Verzeichnis auf Ihrem Host-System, das Ihre Nginx-Konfiguration enthält, in das/etc/nginx/
Verzeichnis im Docker-Container ein/path/to/your/files/to/serve/:/usr/share/nginx/html/
: Hängt ein Verzeichnis auf Ihrem Host-System an, das Dateien enthält, die Nginx bereitstellen soll-d
: startet den Container im Hintergrund (Sie können den Container mit stoppendocker stop nginx-container
)nginx:1.11-alpine
: Verwenden Sie dieses Bild, um Ihren Container zu starten (die offiziellen Nginx Docker-Bilder sind hier aufgelistet ).Auch nützlich:
sudo docker exec nginx-container <command>
diese Option, um einen Befehl im Container auszuführen, z. B.sudo docker exec nginx-container nginx -s reload
um Nginx neu zu laden, nachdem Sie die Konfigurationsdateien auf dem Hostsystem geändert habensudo docker exec -it nginx-container bash
geben Sie eine Bash-Shell in den Container ein, damit Sie direkt dort arbeiten können (nicht empfohlen, aber manchmal nützlich).quelle
Eine alternative Möglichkeit ist die Verwendung von BoringSSL, wodurch die OpenSSL-Umgebung nicht beeinträchtigt wird. Einzelheiten finden Sie unter https://www.admon.org/hardwares/enable-http2-support-for-nginx-on-debian-jessie
quelle
In meiner Situation habe ich das Dotdeb Apt-Repository verwendet. Die Anweisungen dieser Website bieten die Möglichkeit, ein Repository hinzuzufügen, mit dem Sie Nginx mit „vollständiger“ HTTP2-Unterstützung installieren können. Die aktuelle Version ist 1.14. Dies ist eine Nebenversion hinter der letzten Version, sodass Sie nicht zu weit zurückliegen (der aktuelle Backport ist 1.10).
quelle