So konfigurieren Sie Http, Https, WS und WSS in Nginx

So konfigurieren Sie Http, Https, WS und WSS in Nginx

Vorne geschrieben

Im heutigen Internetbereich ist Nginx einer der am häufigsten verwendeten Proxyserver. Viele große Unternehmen verwenden Nginx als Proxyserver in ihren Geschäftssystemen. Daher müssen wir die Konfigurationen von Nginx für Http, Https, WS und WSS verstehen. Komm, komm, lerne Nginx mit Binghe, mache gemeinsam Fortschritte und werde gemeinsam kahl ~~

Nginx-Konfiguration Http

Lassen Sie uns zunächst darüber sprechen, wie Sie HTTP in Nginx konfigurieren. Die Konfiguration von HTTP in Nginx ist eine der am häufigsten verwendeten Funktionen von Nginx. Konfigurieren Sie die entsprechenden Informationen in nginx.conf wie unten gezeigt.

Upstream-Nachricht {
  Server lokaler Host:8080 max_fails=3;
}

Server {
 hören Sie 80;
 Servername localhost;

 Standort / {
  Stamm-HTML;
  Index Index.html Index.htm;
  #CROS-Domänenübergreifenden Zugriff zulassen add_header 'Access-Control-Allow-Origin' '*';
  #proxy_redirect Standard;
  #Das Timeout für die Verbindung zum Proxy-Server. Bitte beachten Sie, dass dieses Timeout 75 Sekunden nicht überschreiten darf. Bei einem Serverausfall wird nach 10 Sekunden auf einen anderen Server umgeleitet.
  Proxy_Verbindungstimeout 10;
 }
 
  Standort /Nachricht {
    Proxy-Passwort http://Nachricht;
    Proxy_set_header Host $host:$server_port;
 }
}

An diesem Punkt wird der Zugriff auf http://localhost/message an http://localhost:8080/message weitergeleitet.

Nginx-Konfiguration Https

Wenn das Unternehmen hohe Sicherheitsanforderungen an die Website stellt, können Sie Https in Nginx konfigurieren. Die spezifischen Konfigurationsinformationen finden Sie wie folgt.

Upstream-Nachricht {
  Server lokaler Host:8080 max_fails=3;
}

Server {
 hören Sie 443 SSL;
 Servername localhost;
 SSL-Zertifikat /usr/local/nginx-1.17.8/conf/keys/binghe.pem;
 SSL-Zertifikatsschlüssel /usr/local/nginx-1.17.8/conf/keys/binghe.key;
 SSL-Sitzungszeitüberschreitung 20 Min.
 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HOCH:!NULL:!aNULL:!MD5:!ADH:!RC4;
 SSL-Protokolle TLSv1 TLSv1.1 TLSv1.2;
 ssl_prefer_server_ciphers ein;
 ssl_verify_client aus;
 Standort / {
  Stamm-HTML;
  Index Index.html Index.htm;
  #CROS-Domänenübergreifenden Zugriff zulassen add_header 'Access-Control-Allow-Origin' '*';
  #Das Timeout für die Verbindung zum Proxy-Server. Bitte beachten Sie, dass dieses Timeout 75 Sekunden nicht überschreiten darf. Bei einem Serverausfall wird nach 10 Sekunden auf einen anderen Server umgeleitet.
  Proxy_Verbindungstimeout 10;
 }
 
  Standort /Nachricht {
    Proxy-Passwort http://Nachricht;
    Proxy_set_header Host $host:$server_port;
 }
}

Zu diesem Zeitpunkt wird der Zugriff auf https://localhost/message an http://localhost:8080/message weitergeleitet.

Nginx-Konfiguration WS

Der vollständige Name von WS lautet WebSocket. Es ist auch relativ einfach, WebSocket in Nginx zu konfigurieren. Sie müssen nur entsprechende Konfigurationen in der Datei nginx.conf vornehmen. Diese Methode ist einfach, aber effektiv und kann die Servicefunktionen des WebSocket-Servers horizontal skalieren.

Um meinen Freunden ein besseres Verständnis zu ermöglichen, werde ich mich hier auf die Nginx-Konfiguration WS konzentrieren.

Zeigen Sie zunächst die Konfigurationsdatei direkt an, wie unten gezeigt (wenn Sie sie verwenden, kopieren Sie sie einfach und ändern Sie IP und Port).

Karte $http_upgrade $connection_upgrade { 
 Standard-Upgrade; 
 '' schließen; 
} 
Upstream wsbackend{ 
 Server-IP1:Port1; 
 Server-IP2:Port2; 
 Keepalive 1000;
} 
 
Server { 
 hören Sie 20038; 
 Standort /{ 
  Proxy_http_Version 1.1; 
  Proxy-Passwort http://wsbackend; 
  Proxy_Redirect aus; 
  Proxy_Set_Header Host $host; 
  Proxy_Set_Header X-Real-IP $Remote_Addr; 
  Proxy_Lese_Timeout 3600 s; 
  proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for; 
  Proxy_Set_Header-Upgrade $http_upgrade; 
  proxy_set_header Verbindung $connection_upgrade; 
 } 
}

Als nächstes werden wir die spezifischen Bedeutungen der oben genannten Konfigurationen analysieren.

Erste:

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

Es bedeutet:

  • Wenn $http_upgrade nicht '' (leer) ist, dann ist $connection_upgrade ein Upgrade.
  • Wenn $http_upgrade '' (leer) ist, dann ist $connection_upgrade geschlossen.

Zweitens:

Upstream wsbackend{ 
 Server-IP1:Port1; 
 Server-IP2:Port2; 
 Keepalive 1000; 
} 

Es stellt den Lastenausgleich von Nginx dar:

Zwei Server (ip1:port1) und (ip2:port2).

Keepalive 1000 gibt die Leerlaufverbindungen an, die vom Upstream-Server in jedem Nginx-Prozess aufrechterhalten werden. Wenn zu viele Leerlaufverbindungen vorhanden sind, wird die am wenigsten genutzte Leerlaufverbindung geschlossen. Dies begrenzt natürlich nicht die Gesamtzahl der Verbindungen. Man kann es sich als die Größe des Leerlaufverbindungspools vorstellen. Der eingestellte Wert sollte dem entsprechen, was der Upstream-Server aushalten kann.

endlich:

Server { 
 hören Sie 20038; 
 Standort /{ 
  Proxy_http_Version 1.1; 
  Proxy-Passwort http://wsbackend; 
  Proxy_Redirect aus;
  Proxy_Set_Header Host $host; 
  Proxy_Set_Header X-Real-IP $Remote_Addr; 
  Proxy_Lese_Timeout 3600 s; 
  proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for; 
  Proxy_Set_Header-Upgrade $http_upgrade; 
  proxy_set_header Verbindung $connection_upgrade; 
 } 
} 

Stellt die Konfiguration des Listening-Servers dar

  • listen 20038 gibt den Port an, auf dem nginx lauscht
  • Standorte / gibt den Abhörpfad an (/ gibt alle Pfade an, universelle Übereinstimmung, entspricht der Standardeinstellung)
  • proxt_http_version 1.1 bedeutet, dass die vom Reverse-Proxy gesendete HTTP-Protokollversion 1.1 ist. HTTP1.1 unterstützt lange Verbindungen
  • proxy_pass http://wsbackend; stellt die URI des Reverse-Proxys dar, in dem Sie Lastausgleichsvariablen verwenden können
  • proxy_redirect aus; bedeutet, den Pfad nicht zu ersetzen. Tatsächlich ist es egal, ob / oder nicht, da der Pfad standardmäßig nach proxy_pass ersetzt wird.
  • proxy_set_header Host $host; bedeutet, dass der Anforderungsheader während der Übertragung unverändert bleibt. $host ist eine eingebaute Variable von nginx, die den aktuellen Anforderungsheader angibt. proxy_set_header bedeutet, den Anforderungsheader festzulegen
  • proxy_set_header X-Real-IP $remote_addr; gibt die Quell-IP oder die aktuelle Client-IP bei der Übertragung an
  • proxy_read_timeout 3600s; Die Verbindung wird erst geschlossen, wenn das Intervall zwischen zwei Anfragen an die Tabelle 3600s überschreitet. Der Standardwert ist 60s, was für die automatische Schließung verantwortlich ist.
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; bedeutet, dass sich der X-Forwarded-For-Header nicht ändert
  • proxy_set_header Upgrade $http_upgrade; bedeutet, dass das Upgrade unverändert bleibt
  • proxy_set_header Verbindung $connection_upgrade; bedeutet, wenn $http_upgrade ein Upgrade ist, ist die Anfrage ein Upgrade (WebSocket), wenn nicht, schließe die Verbindung

An diesem Punkt wird der Zugriff auf ws://localhost:20038 an ip1:port1 und ip2:port2 weitergeleitet.

Nginx-Konfiguration WSS

WSS steht für WebSocket + Https, also ein sicheres WebSocket. Als Nächstes sehen wir uns an, wie WSS konfiguriert wird. Bei der Konfiguration von WS werden die Konfigurationsdetails ausführlich beschrieben. Ich werde hier nicht näher darauf eingehen.

Karte $http_upgrade $connection_upgrade { 
 Standard-Upgrade; 
 '' schließen; 
} 
Upstream wsbackend{ 
 Server-IP1:Port1; 
 Server-IP2:Port2; 
 Keepalive 1000; 
} 
Server{
 hören Sie 20038 SSL;
 Servername localhost;
 SSL-Zertifikat /usr/local/nginx-1.17.8/conf/keys/binghe.com.pem;
 SSL-Zertifikatsschlüssel /usr/local/nginx-1.17.8/conf/keys/binghe.com.key;
 SSL-Sitzungszeitüberschreitung 20 Min.
 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HOCH:!NULL:!aNULL:!MD5:!ADH:!RC4;
 SSL-Protokolle TLSv1 TLSv1.1 TLSv1.2;
 ssl_prefer_server_ciphers ein;
 ssl_verify_client aus;
 Standort /{
   Proxy_http_Version 1.1;
   Proxy-Passwort http://wsbackend;
   Proxy_Redirect aus; 
   Proxy_Set_Header Host $host; 
   Proxy_Set_Header X-Real-IP $Remote_Addr; 
   Proxy_Lese_Timeout 3600 s; 
   proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for; 
   Proxy_Set_Header-Upgrade $http_upgrade; 
   proxy_set_header Verbindung $connection_upgrade; 
 }
}

An diesem Punkt wird der Zugriff auf wss://localhost:20038 an ip1:port1 und ip2:port2 weitergeleitet.

Damit ist dieser Artikel zur Konfiguration von Http, Https, WS und WSS mit Nginx abgeschlossen. Weitere Informationen zur Konfiguration von Http, Https, WS und WSS mit Nginx finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der SSL-Modulkonfiguration von Nginx zur Unterstützung des HTTPS-Zugriffs
  • So konfigurieren Sie mehrere HTTPS-Domänennamen in Nginx
  • Detaillierte Erklärung zur Konfiguration einer sicheren HTTPS-Verbindung für die gesamte Site im Nginx-Server
  • Konfigurationsdetails für die Serverumgebung des WeChat Mini-Programms (SSL, Nginx HTTPS, TLS 1.2-Upgrade)
  • Detaillierte Erläuterung der Nginx-Konfiguration des SSL-Zertifikats zur Erlangung des HTTPS-Zugriffs
  • So konfigurieren Sie ein SSL-Zertifikat in Nginx, um den HTTPS-Dienst zu implementieren
  • Beispiel für die Konfiguration von Nginx mit SSL-Zertifikat zur Implementierung des HTTPS-Zugriffs
  • Detaillierte Erläuterung der Konfigurationspraxis für den Lastenausgleich des Nginx+Tomcat+Https-Servers

<<:  Beispiele für die Verwendung der Operatoren && und || in JavaScript

>>:  Drei Strategien zum Umschreiben von MySQL-Abfrageanweisungen

Artikel empfehlen

So installieren Sie die PHP7 Redis-Erweiterung auf CentOS7

Einführung Im vorherigen Artikel haben wir Redis ...

Tipps zum Anzeigen von Text in Linux (super praktisch!)

Vorwort Bei der täglichen Entwicklung müssen wir ...

uniapp realisiert die Aufnahme-Upload-Funktion

Inhaltsverzeichnis uni-app Einführung HTML-Teil j...

Einige Erfahrung im Aufbau des React Native-Projektframeworks

React Native ist ein plattformübergreifendes Fram...

Docker löst das Problem, dass das Terminal kein Chinesisch eingeben kann

Vorwort: Eines Tages baute ich einen MySQL-Dienst...

Die Vue-Konfigurationsdatei generiert automatisch Routing- und Menüinstanzcode

Inhaltsverzeichnis Vorne geschrieben router.json ...

Native JavaScript-Implementierung des Fortschrittsbalkens

Der spezifische Code für JavaScript zur Implement...