Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So konfigurieren Sie den Nginx-Reverse-Proxy-WebSocket

So konfigurieren Sie den Nginx-Reverse-Proxy-WebSocket

王林
王林nach vorne
2023-05-21 12:13:061229Durchsuche

Da das Websocket-Protokoll basierend auf dem http-Protokoll aktualisiert wird (siehe Abbildung unten), können Sie Nginx Reverse Proxy Websocket verwenden.

So konfigurieren Sie den Nginx-Reverse-Proxy-WebSocket

Websocket

Wie Sie auf diesem Bild sehen können, wird die Websocket-Verbindung basierend auf hergestellt das http-Protokoll auf Basis.

get /chat http/1.1
host: server.example.com
upgrade: websocket
connection: upgrade
sec-websocket-key: x3jjhmbdl1ezlkh9gbhxdw==
sec-websocket-protocol: chat, superchat
sec-websocket-version: 13
origin: http://example.com

Kinder, die mit http vertraut sind, haben vielleicht bemerkt, dass diese Handshake-Anfrage nur noch ein paar weitere Dinge enthält, die dem http-Protokoll ähneln.

upgrade: websocket
connection: upgrade
这个就是websocket的核心了,告诉apache、nginx等服务器:我发起的是websocket协议。
sec-websocket-key: x3jjhmbdl1ezlkh9gbhxdw==
sec-websocket-protocol: chat, superchat
sec-websocket-version: 13

Zuallererst ist sec-websocket-key ein Base64-Kodierungswert, der zufällig vom Browser generiert wird. Er sagt dem Server: Torf, täuschen Sie mich nicht, ich möchte überprüfen, ob Sie wirklich ein Websocket-Assistent sind .

Schließlich teilt sec-websocket-version dem Server den verwendeten Websocket-Entwurf (Protokollversion) mit. Zu Beginn befand sich das Websocket-Protokoll noch im Entwurfsstadium. Es gab viele seltsame Protokolle. Es ist seltsam, dass Firefox und Chrome unterschiedliche Versionen verwenden. Am Anfang gab es zu viele Websocket-Protokolle, was ein großes Problem war. . Aber jetzt ist es in Ordnung, es ist erledigt. Es ist eine Sache, die jeder nutzt. Dann gibt der Server Folgendes zurück und zeigt an, dass die Anfrage angenommen und der Websocket erfolgreich eingerichtet wurde!

http/1.1 101 switching protocols
upgrade: websocket
connection: upgrade
sec-websocket-accept: hsmrc0smlyukagmm5oppg2hagwk=
sec-websocket-protocol: chat

Dies ist der letzte Bereich, für den http verantwortlich ist. Er teilt dem Client mit, dass ich das Protokoll erfolgreich gewechselt habe. ~

upgrade: websocket
connection: upgrade

Es ist immer noch behoben und teilt dem Client mit, dass es sich bei dem bevorstehenden Upgrade um das Websocket-Protokoll handelt. Zu diesem Zeitpunkt hat http seine gesamte Arbeit abgeschlossen und der nächste Schritt besteht darin, vollständig gemäß dem Websocket-Protokoll vorzugehen.

Sobald Sie das Prinzip des Protokolls verstanden haben, können Sie mit dem nächsten Schritt fortfahren

Zuerst konfiguriert Nginx zuerst das https-Zertifikat

Das Serverzertifikat wurde vom Chef konfiguriert, daher habe ich es direkt verwendet. Überprüfen Sie es bei Bedarf selbst. 0.0

Fügen Sie die folgende Konfiguration im Knoten service der Nginx-Konfigurationsdatei hinzu Nur zufällig Ja, teilen Sie Nginx die URL mit, die als Proxy verwendet werden soll. Wenn ich auf meinen Server https://abc.com/wss zugreife, führt Nginx eine Zuordnung durch meine Anfrage an Port 8888 dieser Maschine.

proxy_pass Die URL, an die Sie einen Proxy senden möchten. Mein Proxy ist der 8888-Port dieser Maschine. service 节点中添加如下配置

location /wss
    {
         proxy_pass http://127.0.0.1:8888;
         proxy_http_version 1.1;
         proxy_set_header upgrade $http_upgrade;
         proxy_set_header connection "upgrade";
        proxy_set_header x-real-ip $remote_addr;
     }

解释一下参数

/wss 这个是随便起的,告诉nginx要代理的url,现在我的设置为 wss ,当我访问的我的服务器 https://abc.com/wss 时,nginx会把我的请求映射到本机的8888端口。

proxy_pass 要代理到的url,我的代理到本机的8888端口。

proxy_http_version 代理时使用的 http版本。

重点来了:

代理websocket的关键参数

proxy_set_header upgrade 把代理时http请求头的 upgrade 设置为原来http请求的请求头,wss协议的请求头为 websocket
proxy_set_header connection 因为代理的wss协议,所以http请求头的 connection 设置为 upgrade

proxy_set_header x-real-ip 给代理设置原http请求的ip,填写 $remote_addr 即可

至于websocket协议的response的参数,在反向代理的时候不用管。

到这里,nginx反向代理websocket的配置就完成了,重启nginx,用websocket连接试试,在原来wss地址的地方填写 wss://abc.com/wss

proxy_http_version Die beim Proxying verwendete HTTP-Version.

Hier kommt der entscheidende Punkt:

Schlüsselparameter des Proxy-Websockets

proxy_set_header upgrade Setzen Sie den upgrade des HTTP-Anforderungsheaders während des Proxys auf den Anforderungsheader von Der ursprüngliche HTTP-Anfrage-Header des WSS-Protokolls ist websocket
proxy_set_header-Verbindung Aufgrund des Proxy-WSS-Protokolls ist der HTTP-Anfrage-Header Verbindung ist auf <code>upgrade

proxy_set_header x-real-ip gesetzt. Legen Sie die IP der ursprünglichen http-Anfrage für den Proxy fest und geben Sie ein $remote_addr

Wie für Websocket Die Antwortparameter des Protokolls müssen während des Reverse-Proxys nicht gesteuert werden.

An diesem Punkt ist die Konfiguration des Nginx-Reverse-Proxy-Websockets abgeschlossen. Starten Sie Nginx neu, versuchen Sie, eine Verbindung mit dem Websocket herzustellen, und geben Sie wss://abc.com/wss anstelle des ursprünglichen wss ein Adresse. Wenn die Verbindung zum Websocket erfolgreich hergestellt wurde, bedeutet dies, dass der Nginx-Reverse-Proxy-Websocket erfolgreich war.

🎜Zusammenfassung🎜🎜🎜Die aktuelle Konfiguration ist nur die Konfiguration beim Reverse-Proxy auf dem lokalen Computer. Wenn Sie den Proxy auf andere Hosts umkehren möchten, kann es zu domänenübergreifenden Problemen kommen Nginx-Reverse-Proxy. 🎜🎜🎜Thinking🎜🎜🎜Sie können diesen Absatz in der Nginx-Konfigurationsdatei sehen🎜
location ~ .php$ {
   root html;
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param script_filename $document_root$fastcgi_script_name;
   include fastcgi_params;
}
🎜Dies ist die PHP-Konfigurationsdatei in Nginx. Diese Konfigurationsliste kommt mir gerade sehr bekannt vor. . Beim Durchsuchen des Internets habe ich herausgefunden, dass Nginx bei der Verarbeitung von PHP-Typanfragen die Anfrage an den Fastcgi-Verwaltungsprozess sendet. Der Fascgi-Verwaltungsprozess wählt das Verarbeitungsergebnis des CGI-Unterprozesses aus und gibt es an Nginx zurück, und PHP-FPM ist ein PHP fastcgi-Manager. Nginx selbst kann PHP nicht verarbeiten. Wenn eine Anfrage eingeht, wird sie zur Verarbeitung an den PHP-Interpreter gesendet und das Ergebnis zurückgegeben. Wenn Nginx Anfragen vom Typ PHP verarbeitet, erfolgt die Implementierung daher im Wesentlichen über die Reverse-Proxy-Funktion. 🎜🎜Wir können unser Denken erweitern und den Nginx-Reverse-Proxy verwenden, um mehr Funktionen zu erreichen, z. B. das Proxying von Tomcat🎜
location /tomcat
    {
         proxy_pass http://127.0.0.1:8080;
         proxy_http_version 1.1;
        proxy_set_header x-real-ip $remote_addr;
     }

Das obige ist der detaillierte Inhalt vonSo konfigurieren Sie den Nginx-Reverse-Proxy-WebSocket. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen