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 and SSL on the same 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-address -p 443Die 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."