Heim > Artikel > Betrieb und Instandhaltung > So verwenden Sie Ports in Nginx wieder
Version nginx-1.15.2 fügt die Variable $ssl_preread_protocol hinzu, mit der Sie vorab bestimmen können, ob die Verbindung ein SSL/TLS-Protokoll oder ein Nicht-SSL/TLS-Protokoll ist, wenn Sie den Stream-Reverse-Proxy verwenden Erreichen der gleichen Ports zur Weiterleitung verschiedener Dienste.
Das Modul stream_ssl_preread überprüft die anfängliche ClientHello-Nachricht in einer SSL- oder TLS-Verbindung und extrahiert mehrere Werte, die sein können Wird zur Verwaltung der Verbindung verwendet. Die in Version 1.15.2 hinzugefügte Variable $ssl_preread_protocol erfasst die neueste SSL/TLS-Versionsnummer aus dem Feld „client_version“ der Nachricht „ClientHello“. Wenn die „supported_versions“-Erweiterung „ClientHello“ in der Nachricht vorhanden ist, wird die Variable auf TLSv1.2/TLSv1.3 gesetzt.
Beispiel: Führen Sie Nginx auf einem Reverse-Proxy-Server aus und überwachen Sie Port 443. Es gibt zwei Sätze von Diensten im Backend, einer ist der HTTPS-Website-Dienst (TLS1.2/1.3 aktiviert) und der andere ist SSH service müssen wir uns darüber im Klaren sein, dass diese beiden Dienstesätze auf demselben Port laufen (konfigurierter Port 443) – die Eingabeanforderung wird von Nginx automatisch unterschieden.
Der Einfachheit halber verwende ich direkt die Docker-Umgebung
Nginx-Version
# docker exec -it nginx nginx -V nginx version: nginx/1.15.10 built by gcc 8.2.0 (Alpine 8.2.0) built with OpenSSL 1.1.1b 26 Feb 2019 ...<省略若干行>...
Verzeichnisdatei
# tree ./nginx-with-L4-reuse/./nginx-with-L4-reuse/ ├── config│ └── nginx │ ├── conf.d │ │ └── default.conf │ ├── fastcgi.conf │ ├── fastcgi_params │ ├── mime.types │ └── nginx.conf └── docker-compose.yaml 3 directories, 6 files
docker-compose.yaml
# docker-compose.yaml version: "2.4" services: nginx: container_name: nginx image: nginx:alpine network_mode: host volumes: - ./config/nginx:/etc/nginx/:ro ports: - "443:443" restart: always
nginx.conf
user nginx; worker_processes 2; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } stream { log_format stream '{"@access_time":"$time_iso8601",' '"clientip":"$remote_addr",' '"pid":$pid,' '"pro":"$protocol",' '"ssl_pro": "$ssl_preread_protocol"', '"pro":"$protocol",' '"stus":$status,' '"sent":$bytes_sent,' '"recv":$bytes_received,' '"sess_time":$session_time,' '"up_addr":"$upstream_addr",' '"up_sent":$upstream_bytes_sent,' '"up_recv":$upstream_bytes_received,' '"up_conn_time":$upstream_connect_time,' '"up_resp_time":"$upstream_first_byte_time",' '"up_sess_time":$upstream_session_time}'; upstream ssh { server 192.168.50.212:22; } upstream web { server 192.168.50.215:443; } map $ssl_preread_protocol $upstream { default ssh; "TLSv1.2" web; "TLSv1.3" web; } # SSH and SSL on the same port server { listen 443; proxy_pass $upstream; ssl_preread on; access_log /var/log/nginx/stream_443.log stream; } }
$ssl_preread_protocol implementiert verschiedene Geschäftskonfigurationen auf der IP-Ebene, was für bestimmte Anforderungen sehr sinnvoll ist – obwohl es funktionale Einschränkungen gibt. Tengine-2.3.0 hat jedoch eine IP-Schicht basierend auf der Weiterleitung von Domänennamen implementiert. Möglicherweise wird diese Funktion in Nginx eingeführt.
Weitere technische Artikel zum Thema Nginx finden Sie in der Spalte Tutorials zur Nginx-Nutzung, um mehr zu erfahren!
Das obige ist der detaillierte Inhalt vonSo verwenden Sie Ports in Nginx wieder. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!