So verwenden Sie Nginx zur Implementierung der WebSocket-Protokollunterstützung
Das WebSocket-Protokoll ist ein Protokoll, das die bidirektionale Kommunikation in Webanwendungen implementiert. Es ermöglicht dem Server, aktiv Daten an den Client zu senden, ohne dass der Client zuerst eine Anfrage initiiert. Im Vergleich zum herkömmlichen HTTP-Protokoll weist das WebSocket-Protokoll eine geringere Latenz und eine höhere Effizienz auf und eignet sich für Anwendungsszenarien mit hohen Echtzeitanforderungen. In diesem Artikel wird erläutert, wie Sie Nginx als Reverse-Proxy zur Unterstützung des WebSocket-Protokolls verwenden.
Nginx ist ein leistungsstarker Open-Source-Reverse-Proxy-Server, der für Lastausgleich, Reverse-Proxy, statisches Datei-Caching und andere Szenarien verwendet werden kann. Nginx stellt außerdem einige Module und Anweisungen zur Unterstützung des WebSocket-Protokolls bereit. Das Folgende ist ein einfaches Konfigurationsbeispiel:
http { # 其他的http配置 map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; location /ws/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } } }
In der obigen Konfiguration haben wir einen /ws/
-Pfad definiert, um WebSocket-Verbindungsanfragen zu verarbeiten. WebSocket-Anfragen werden per Proxy an die http://backend
-Adresse weitergeleitet. Die proxy_pass
-Direktive wird verwendet, um die Back-End-Serveradresse des Proxys festzulegen, und die proxy_http_version
-Direktive wird verwendet, um die HTTP-Protokollversion des Proxys festzulegen. Die proxy_set_header
-Direktive wird zum Festlegen von Anforderungsheaderinformationen verwendet, von denen Upgrade
und Connection
erforderlich sind und dazu dienen, den Server zu informieren, das Protokoll zu aktualisieren . /ws/
路径,用于处理WebSocket的连接请求。WebSocket的请求将会被代理到http://backend
地址上。proxy_pass
指令用于设置代理的后端服务器地址,proxy_http_version
指令用于设置代理的HTTP协议版本。proxy_set_header
指令用于设置请求头信息,其中Upgrade
和Connection
是必需的,用于告知服务器进行协议升级。
需要注意的是,上述配置中的map
指令用于将客户端请求头中的Upgrade
字段映射为$http_upgrade
变量,并根据其值来动态设置$connection_upgrade
变量。这样可以实现在请求中发现Upgrade
字段时,将Upgrade
字段的值设置为$connection_upgrade
字段的值,否则将关闭连接。
在配置完成后,我们只需要将Nginx启动即可:
sudo service nginx start
现在,我们已经完成了使用Nginx作为反向代理来支持WebSocket协议的配置。我们可以使用以下代码片段来测试WebSocket的连接:
var socket = new WebSocket("ws://yourdomain.com/ws/"); socket.onopen = function () { console.log("Connection established."); }; socket.onmessage = function (event) { console.log("Received message: ", event.data); }; socket.onclose = function () { console.log("Connection closed."); };
将ws://yourdomain.com/ws/
map
-Direktive in der obigen Konfiguration verwendet wird, um das Feld Upgrade
im Client-Anfrage-Header dem $http_upgrade
zuzuordnen > Variable und legen Sie die Variable $connection_upgrade
dynamisch entsprechend ihrem Wert fest. Wenn das Feld Upgrade
in der Anfrage gefunden wird, wird auf diese Weise der Wert des Felds Upgrade
auf den Wert von $connection_upgrade
gesetzt Andernfalls wird die Verbindung geschlossen. Nachdem die Konfiguration abgeschlossen ist, müssen wir nur noch Nginx starten: 🎜rrreee🎜Jetzt haben wir die Konfiguration der Verwendung von Nginx als Reverse-Proxy zur Unterstützung des WebSocket-Protokolls abgeschlossen. Wir können den folgenden Codeausschnitt verwenden, um die WebSocket-Verbindung zu testen: 🎜rrreee🎜Ersetzen Sie ws://yourdomain.com/ws/
durch die tatsächliche WebSocket-Adresse und öffnen Sie die Entwicklertools des Browsers, um die Kontrollstation anzuzeigen Ausgabe. Wenn Sie eine normale Verbindung herstellen und Nachrichten empfangen können, bedeutet dies, dass das WebSocket-Protokoll erfolgreich von Nginx unterstützt wurde. 🎜🎜Zusammenfassend lässt sich sagen, dass wir mithilfe der obigen Konfigurations- und Codebeispiele Nginx problemlos zur Unterstützung des WebSocket-Protokolls verwenden können, um eine bidirektionale Kommunikation mit hohen Echtzeitanforderungen zu erreichen. 🎜Das obige ist der detaillierte Inhalt vonSo verwenden Sie Nginx zur Implementierung der WebSocket-Protokollunterstützung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!