Detaillierte Erläuterung der Nginx-Weiterleitungssocket-Portkonfiguration

Detaillierte Erläuterung der Nginx-Weiterleitungssocket-Portkonfiguration

Gängige Szenarien für die Weiterleitung von Socket-Ports von Nginx: Online-Lernanwendungen fügen zusätzlich zu den regulären Funktionen eine Chatroom-Funktion hinzu. Das Backend wählt Swoole als Dienstanbieter aus und möchte nicht, dass das Front-End im IP:Port-Modus eine direkte Verbindung zum Dienst herstellt. Daher muss Nginx zur Weiterleitung verwendet werden.

Normalerweise können wir auf der Benutzerseite direkt einen Socket-Link erstellen, aber ein solcher Vorgang legt den Port offen und bringt gewisse Sicherheitsrisiken mit sich. Die Verwendung von Nginx zur Weiterleitung kann den Port verbergen. Ein weiteres Problem besteht darin, dass einige Header-Parameter während des Weiterleitungsprozesses auch zum Socket-Dienstanbieter gebracht werden müssen und für den Rest Nginx nur die Konvertierung vom regulären Protokoll zum Websocket verarbeiten muss.

Unter ihnen ist „Upgrade“ ein Hop-by-Hop-Header und kann nicht vom Client an den Proxyserver weitergeleitet werden. Durch Weiterleiten an den Proxy kann der Client dieses Problem mithilfe der CONNECT-Methode umgehen. Dies funktioniert allerdings nicht mit einem Reverse-Proxy, da dem Client kein Proxy-Server bekannt ist und eine spezielle Behandlung auf dem Proxy-Server erforderlich ist. Gleichzeitig können die Hop-by-Hop-Header, die "Upgrade" und "Connection" enthalten, nicht übergeben werden. Daher müssen Sie diese beiden Parameter bei der Konvertierung in Websocket mitbringen: zum Beispiel:

Standort /chat/ {
  Proxy-Passwort http://backend;
  Proxy_http_Version 1.1;
  Proxy_Set_Header-Upgrade $http_upgrade;
  proxy_set_header Verbindung "Upgrade";
}

Erweitert: Lassen Sie den Wert des an den Proxy-Server weitergeleiteten Header-Felds „Verbindung“ vom Wert des Felds „Upgrade“ im Header der Client-Anforderung abhängig sein. Zum Beispiel:

http {
  Karte $http_upgrade $connection_upgrade {
    Standard-Upgrade;
    '' schließen;
  }

  Server {
    ...

    Standort /chat/ {
      Proxy-Passwort http://backend;
      Proxy_http_Version 1.1;
      Proxy_Set_Header-Upgrade $http_upgrade;
      proxy_set_header Verbindung $connection_upgrade;
    }
  }

Hinweis: Das http://backend im Beispiel ist eine Gruppe von Servern mit Lastenausgleich. Wenn es nur einen einzigen Server gibt, können Sie proxy_pass http://127.0.0.1:9501; wie folgt schreiben.

Darüber hinaus wird standardmäßig eine Verbindung geschlossen, die innerhalb von 60 Sekunden keine Daten übertragen hat. Diese Zeit kann mit der Direktive „proxy_read_timeout“ verlängert werden. Alternativ kann der Proxyserver so konfiguriert werden, dass er regelmäßig Ping-Frames sendet, um das Timeout zurückzusetzen und zu prüfen, ob der Link verfügbar ist.

Referenzlink: Nginx Websocket-Proxying

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Fallstricke des Nginx-Proxy-Socket.io-Dienstes
  • Detaillierte Erklärung der Nginx-WebSocket-Konfiguration
  • Detaillierte Erklärung der Lösung für die Nginx Reverse Proxy WebSocket-Antwort 403
  • Nginx tatsächliches Kampf-Reverse-Proxy-WebSocket-Konfigurationsbeispiel
  • Einführung in die Websocket-Konfigurationsmethode des Nginx-Servers
  • Detaillierte Erläuterung der Socket-Segmentierung im Nginx-Server
  • Tutorial zur Verwendung von Nginx als WebSocket-Proxy
  • Nginx Reverse Proxy WebSocket-Konfigurationsbeispiel

<<:  Allgemeine Befehle für MySQL-Autorisierung, Start und Dienststart

>>:  Eine kurze Diskussion über mehrere Spezifikationen der JS-Frontend-Modularisierung

Artikel empfehlen

Mybatis-Statistiken zur Ausführungszeit jeder SQL-Anweisung

Hintergrund In letzter Zeit werde ich in Intervie...

Allgemeine Befehle zum Bereitstellen von InfluxDB und Mongo mit Docker

Bereitstellen einer Datenbank basierend auf Docke...

Details zum Vue Page Stack Manager

Inhaltsverzeichnis 2. Bewährte Methoden 2.1 Am Le...

So fügen Sie einem Hintergrundbild in CSS3 eine Farbmaske hinzu

Vor einiger Zeit stieß ich während der Entwicklun...

So verwenden Sie worker_threads zum Erstellen neuer Threads in nodejs

Einführung Wie im vorherigen Artikel erwähnt, gib...

Sechs Vererbungsmethoden in JS und ihre Vor- und Nachteile

Inhaltsverzeichnis Vorwort Vererbung von Prototyp...

HTML-Kopfstruktur

Im Folgenden werden die häufig verwendete Kopfstr...

Vergleich der JS-Array-Loop-Methode und der Effizienzanalyse

Array-Methoden JavaScript bietet viele Array-Meth...

Detaillierter Prozessbericht der Nginx-Installation und -Konfiguration

Inhaltsverzeichnis 1 Einführung in nginx 1 Was is...

Details zur JS-Array-Deduplizierung

Inhaltsverzeichnis 1 Testfälle 2 JS-Array-Dedupli...