Heim >Betrieb und Instandhaltung >Nginx >So konfigurieren Sie den Nginx-Reverse-Proxy-WebSocket
Da das Websocket-Protokoll basierend auf dem http-Protokoll aktualisiert wird (siehe Abbildung unten), können Sie Nginx Reverse Proxy Websocket verwenden.
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-ZertifikatDas 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-Websocketsproxy_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!