Heute freuen wir uns, die Verfügbarkeit von NGINX Open Source 1.15.2 bekannt zu geben. Ein Hauptmerkmal dieser Version ist die neue Variable $ssl_preread_protocol
, mit der Sie beim Weiterleiten von Datenverkehr über einen TCP-Proxy ( Stream
-Proxy) zwischen SSL/TLS und anderen Protokollen unterscheiden können. Dies ist nützlich, wenn Sie Firewall-Einschränkungen umgehen möchten, indem Sie beispielsweise SSL/TLS- und SSH-Dienste auf demselben Port ausführen.
Die neue Funktion wird auch für NGINX Plus-Kunden in der kommenden Version NGINX Plus R16 verfügbar sein .
$ssl_preread_protocol
verwendet?Wenn Sie SSL/TLS-Verkehr mit dem http-
oder dem Stream-
Modul beenden und entschlüsseln, erfasst die Variable „$ ssl_protocol
( http
, stream
)“ die vom Client verwendete SSL- oder TLS-Version. Manchmal möchten Sie den SSL/TLS-Verkehr jedoch einfach ohne Entschlüsselung weiterleiten und mithilfe der Stream-
Module einen einfachen TCP-Proxy oder Load Balancer implementieren.
Das Modul stream_ssl_preread
überprüft die anfängliche ClientHello-
Nachricht in einer SSL- oder TLS-Verbindung und extrahiert mehrere Werte, die zur Verwaltung der Verbindung verwendet werden können. Die in Version 1.15.2 hinzugefügte Variable $ssl_preread_protocol
erfasst die neueste SSL/TLS-Versionsnummer aus dem Feld „client_version“
der ClientHello-
Nachricht. Wenn die Erweiterung „supported_versions“
in der ClientHello
-Nachricht vorhanden ist, wird die Variable auf TLSv1.3
gesetzt.
Wenn eine Verbindung keine Version von SSL oder TLS verwendet, ist die Variable $ssl_preread_protocol
leer. Dies zeigt an, dass die Verbindung ein anderes Protokoll als SSL/TLS verwendet, beispielsweise SSH.
Der folgende Konfigurationsausschnitt verwendet die Variable $ssl_preread_protocol
in einem Map-
Block, um die Variable $upstream
auf den Namen der Upstream-Gruppe zu setzen, die für das für die Verbindung verwendete Protokoll geeignet ist. Die Direktive „proxy_pass“
leitet die Anfrage dann an die ausgewählte Upstream-Gruppe weiter. Beachten Sie, dass die Direktive „ssl_preread
on
“ im Serverblock
enthalten sein muss, damit die Variable $ssl_preread_protocol
funktioniert.
stream { upstream ssh { server 192.0.2.1:22; } upstream web { server 192.0.2.2:443; } map $ssl_preread_protocol $upstream { default ssh; "TLSv1.2" web; } # SSH und SSL auf dem gleichen Port server { listen 443; proxy_pass $upstream; ssl_preread on ; } }
Damit die Konfiguration wirksam ist, müssen Clients auf den SSH-Server über Port 443 statt über den Standardport 22 zugreifen. Mit dem integrierten SSH-Client unter MacOS und Linux können Sie beispielsweise das Flag -p
verwenden, um den Port zu ändern:
$ ssh ssh-Server-IP-Adresse -p 443
Die neueste Version von NGINX ist immer im Mainline-Zweig unseres offiziellen Repository verfügbar.
NGINX Open Source 1.15.2 enthält zusätzliche Verbesserungen und Fehlerbehebungen. Eine vollständige Liste der Neuerungen finden Sie im NGINX-Änderungsprotokoll .
„Dieser Blogbeitrag kann auf Produkte verweisen, die nicht mehr verfügbar und/oder nicht mehr unterstützt werden. Die aktuellsten Informationen zu verfügbaren F5 NGINX-Produkten und -Lösungen finden Sie in unserer NGINX-Produktfamilie . NGINX ist jetzt Teil von F5. Alle vorherigen NGINX.com-Links werden auf ähnliche NGINX-Inhalte auf F5.com umgeleitet."