Nginx verwendet das Stream-Modul zur Umleitung, um Port-Multiplexing zu realisieren

Es gibt viele Möglichkeiten, Nginx zum Multiplexen von Ports zu verwenden. Die häufigste Methode besteht darin, denselben Port in verschiedenen Serverblöcken abzuhören und die Umleitung entsprechend unterschiedlichen Hostnamen durchzuführen. In diesem Artikel wird eine neuere Methode des Port-Multiplexings vorgestellt, mit der TLS-verschlüsselte TCP-Daten bequem ausgelagert werden können.

1 Nginx-Stream-Umleitung

Nginx arbeitet im Allgemeinen auf der Anwendungsebene und kann eine Umleitung durch die Überwachung von Ports durch mehrere virtuelle Hosts realisieren. Tatsächlich hat Nginx nach Version 1.0.9 ein Stream-Modul hinzugefügt, das das SNI-Protokoll (ein Erweiterungsprotokoll von TLS) verwendet, um Datenverkehr an verschiedene Hosts am selben Port weiterzuleiten. Dieser Weiterleitungsprozess wird auf der Transportschicht abgeschlossen.

2 Split-Beispiel

Das Folgende zeigt ein Beispiel für eine Stream-Umleitung, bei der Anforderungen entsprechend unterschiedlichen Domänennamen (capa.ink und crps.ink) an verschiedene Dienste (web1 und web2) weitergeleitet werden, wodurch das Multiplexen von Port 443 realisiert wird.

Bitte beachten Sie, dass Ihr Nginx das Stream-Modul enthält. Andernfalls kompilieren und installieren Sie es bitte neu!

Die Konfigurationsmethode des Stream-Blocks (in nginx.conf) ist unten dargestellt. Beachten Sie, dass der Stream-Block dem http-Block gegenübergestellt ist.

stream {
    map $ssl_preread_server_name $stream_map {
        capa.ink web1;
        crps.ink web2;
    }
    upstream web1 {
        server 127.0.0.1:8000;
    }
    upstream web2 {
        server 127.0.0.1:8001;
    }
    
    #复用443端口
    server {
        listen 443 reuseport;
        listen [::]:443 reuseport;
        proxy_pass $stream_map;
        ssl_preread on;    #重点,一定要加这句
    }
}

Zu diesem Zeitpunkt sollte Nginx in der Lage sein, Anfragen entsprechend dem Domänennamen an Port 8000 oder 8001 umzuleiten, und wir können diesen Port bei der Konfiguration des Serverblocks direkt überwachen.

Der folgende Code zeigt ein vollständiges PHP-basiertes Webseiten-Konfigurationsschema, das dem Dienst „web1“ in der obigen Konfiguration entspricht. Wir müssen uns nur um die ersten drei Zeilen im Serverblock kümmern. Da die Anfrage für diesen Domainnamen vom Stream-Modul an Port 8000 weitergeleitet wurde, muss hier nur Port 8000 überwacht werden.

server {
        listen 8000 ssl http2;
        server_name capa.ink;
        port_in_redirect off;

        ssl_certificate /document/mywebsite/certification/capa.ink_bundle.pem;
        ssl_certificate_key /document/mywebsite/certification/capa.ink.key;

        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        root /document/mywebsite;
        index index.php;

        if (!-e $request_filename) {
                rewrite ^(.*)$ /index.php$1 last;
        }

        location ~ .*\.php(\/.*)*$ {
                root           /document/mywebsite;
                fastcgi_split_path_info ^(.+?.php)(/.*)$;
                fastcgi_pass    127.0.0.1:9005;
                fastcgi_index   index.php;
                fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include         fastcgi_params;
    }
}

3 Zusammenfassung

In Nginx besteht der Unterschied zwischen der Verwendung des Stream-Blocks zum Multiplexen von Ports und der Verwendung des Server-Blocks zum Multiplexen von Ports darin, dass der Stream-Block die Übertragung des Domänennamens auf der Transportschicht und die Verteilung abschließt, während der Server-Block die enthaltenen Daten liest Geben Sie die Domänennameninformationen auf der Anwendungsebene in die Daten ein und teilen Sie sie dann auf. Stream kann Ports bei verschlüsselter Übertragung problemlos wiederverwenden. Soll das unverschlüsselte http-Protokoll verarbeitet werden, ist der herkömmliche Serverblock voll funktionsfähig.

Je suppose que tu aimes

Origine blog.csdn.net/diqiudq/article/details/126907193
conseillé
Classement