Comment utiliser Nginx pour implémenter la prise en charge du protocole WebSocket
Le protocole WebSocket est un protocole qui implémente une communication bidirectionnelle dans les applications Web. Il permet au serveur d'envoyer activement des données au client sans que celui-ci lance au préalable une requête. Comparé au protocole HTTP traditionnel, le protocole WebSocket présente une latence plus faible et une efficacité plus élevée, et convient aux scénarios d'application ayant des exigences élevées en temps réel. Cet article explique comment utiliser Nginx comme proxy inverse pour prendre en charge le protocole WebSocket.
Nginx est un serveur proxy inverse open source hautes performances qui peut être utilisé dans l'équilibrage de charge, le proxy inverse, la mise en cache de fichiers statiques et d'autres scénarios. Nginx fournit également des modules et directives pour prendre en charge le protocole WebSocket. Voici un exemple de configuration simple :
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; } } }
Dans la configuration ci-dessus, nous avons défini un chemin /ws/
pour gérer les demandes de connexion WebSocket. Les requêtes WebSocket seront transmises par proxy à l'adresse http://backend
. La directive proxy_pass
est utilisée pour définir l'adresse du serveur backend du proxy, et la directive proxy_http_version
est utilisée pour définir la version du protocole HTTP du proxy. La directive proxy_set_header
est utilisée pour définir les informations d'en-tête de requête, dont Upgrade
et Connection
sont requises pour informer le serveur d'effectuer les mises à niveau du protocole. /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
dans la configuration ci-dessus est utilisée pour mapper le champ Upgrade
dans l'en-tête de la requête client au $http_upgrade
variable et définissez dynamiquement la variable $connection_upgrade
en fonction de sa valeur. De cette façon, lorsque le champ Upgrade
est trouvé dans la requête, la valeur du champ Upgrade
est fixée à la valeur du $connection_upgrade
champ, sinon la connexion sera fermée. Une fois la configuration terminée, il nous suffit de démarrer Nginx : 🎜rrreee🎜Maintenant, nous avons terminé la configuration de l'utilisation de Nginx comme proxy inverse pour prendre en charge le protocole WebSocket. Nous pouvons utiliser l'extrait de code suivant pour tester la connexion WebSocket : 🎜rrreee🎜Remplacez ws://yourdomain.com/ws/
par l'adresse WebSocket réelle et ouvrez les outils de développement du navigateur pour afficher la station de contrôle. sortir. Si vous pouvez vous connecter normalement et recevoir des messages, cela signifie que le protocole WebSocket a été pris en charge avec succès par Nginx. 🎜🎜En résumé, grâce à la configuration et aux exemples de code ci-dessus, nous pouvons facilement utiliser Nginx pour prendre en charge le protocole WebSocket afin d'obtenir une communication bidirectionnelle avec des exigences élevées en temps réel. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!