Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So verwenden Sie Ports in Nginx wieder

So verwenden Sie Ports in Nginx wieder

(*-*)浩
(*-*)浩Original
2019-06-11 09:24:489648Durchsuche

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.

So verwenden Sie Ports in Nginx wieder

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn