Maison > Article > Opération et maintenance > Implémentation efficace de la communication entre Nginx Proxy Manager et WebSocket
Nginx Proxy Manager (ci-après dénommé NPM) est un outil de gestion de proxy basé sur Nginx qui offre un moyen simple et puissant de gérer plusieurs serveurs proxy inverse. Récemment, j'ai rencontré un problème lors de l'utilisation de NPM : comment parvenir à une communication efficace entre NPM et WebSocket. Dans cet article, je partagerai mes expériences et les leçons apprises pour atteindre cet objectif, et fournirai des exemples de code concrets.
Avant de commencer, jetons un bref aperçu de WebSocket. WebSocket est un protocole de communication full-duplex sur une seule connexion TCP. Contrairement à HTTP, WebSocket permet au serveur d'envoyer activement des données au client sans que celui-ci fasse une demande. En raison de sa faible latence et de sa grande efficacité, WebSocket est très populaire dans les applications en temps réel, telles que les applications de chat, la transmission de données en temps réel, etc.
NPM utilise Nginx pour gérer les requêtes HTTP et HTTPS et fournit une fonctionnalité de proxy inverse. Afin d'obtenir une communication efficace avec WebSocket, nous devons configurer NPM pour transmettre les requêtes WebSocket et gérer correctement les informations d'en-tête associées. Voici un exemple simple de configuration Nginx :
server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; } location /ws/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; } location /api/ { ... } location /admin/ { ... } ... upstream backend { server backend.example.com; } }
Dans la configuration ci-dessus, nous avons utilisé deux blocs d'emplacement pour gérer les requêtes WebSocket. Le premier bloc d'emplacement est utilisé pour gérer les requêtes WebSocket sous le chemin racine, tandis que le deuxième bloc d'emplacement est utilisé pour gérer les requêtes WebSocket commençant par /ws/. Dans ces deux blocs d'emplacement, nous utilisons la directive proxy_pass pour transmettre la requête au serveur backend et définir les informations d'en-tête HTTP pertinentes pour garantir que la requête WebSocket peut être correctement transmise au serveur backend.
En plus de configurer Nginx, nous devons également implémenter la logique liée à WebSocket sur le serveur backend. Voici un exemple simple implémenté à l'aide de Node.js et de la bibliothèque WebSocket :
const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', (ws) => { console.log('Client connected'); ws.on('message', (message) => { console.log(`Received: ${message}`); }); ws.send('Hello, client!'); });
Dans le code ci-dessus, nous créons un serveur WebSocket et gérons les nouvelles connexions dans l'événement de connexion. Dans le gestionnaire d'événements de connexion, nous pouvons gérer le message du client et envoyer la réponse.
En utilisant la configuration Nginx ci-dessus et le code du serveur WebSocket, nous pouvons établir une communication efficace entre NPM et WebSocket. Par exemple, nous pouvons utiliser NPM pour gérer les requêtes HTTP et transférer les requêtes WebSocket sur des URL spécifiques vers le serveur WebSocket backend. De cette façon, nous pouvons utiliser à la fois HTTP et WebSocket sous le même nom de domaine, et les requêtes WebSocket peuvent être gérées par NPM comme les autres requêtes HTTP.
En résumé, en configurant correctement NPM et en implémentant le code du serveur backend WebSocket, nous pouvons parvenir à une communication efficace entre NPM et WebSocket. Cela nous permet de gérer facilement les requêtes WebSocket tout en utilisant NPM et de mettre en œuvre les capacités de communication en temps réel requises pour les applications en temps réel. J'espère que les exemples de code et les explications de cet article seront utiles !
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!