Maison > Opération et maintenance > Nginx > Comment utiliser Nginx pour implémenter la prise en charge du protocole WebSocket

Comment utiliser Nginx pour implémenter la prise en charge du protocole WebSocket

王林
Libérer: 2023-08-03 18:21:23
original
2344 Les gens l'ont consulté

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;
        }
    }
}
Copier après la connexion

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指令用于设置请求头信息,其中UpgradeConnection是必需的,用于告知服务器进行协议升级。

需要注意的是,上述配置中的map指令用于将客户端请求头中的Upgrade字段映射为$http_upgrade变量,并根据其值来动态设置$connection_upgrade变量。这样可以实现在请求中发现Upgrade字段时,将Upgrade字段的值设置为$connection_upgrade字段的值,否则将关闭连接。

在配置完成后,我们只需要将Nginx启动即可:

sudo service nginx start
Copier après la connexion

现在,我们已经完成了使用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.");
};
Copier après la connexion

ws://yourdomain.com/ws/

Il convient de noter que la directive 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal