Rumah >Operasi dan penyelenggaraan >Nginx >Pelaksanaan komunikasi yang cekap antara Pengurus Proksi Nginx dan WebSocket

Pelaksanaan komunikasi yang cekap antara Pengurus Proksi Nginx dan WebSocket

王林
王林asal
2023-09-26 14:46:411707semak imbas

Nginx Proxy Manager与WebSocket的高效通信实现

Pengurus Proksi Nginx (selepas ini dirujuk sebagai NPM) ialah alat pengurusan proksi berasaskan Nginx yang menyediakan cara mudah dan berkuasa untuk mengurus berbilang pelayan proksi terbalik. Baru-baru ini, saya menghadapi masalah apabila menggunakan NPM: bagaimana untuk mencapai komunikasi yang cekap antara NPM dan WebSocket. Dalam artikel ini, saya akan berkongsi pengalaman dan pengajaran saya dalam mencapai matlamat ini, dan memberikan contoh kod konkrit.

Sebelum kita bermula, mari kita lihat secara ringkas pada WebSocket. WebSocket ialah protokol untuk komunikasi dupleks penuh melalui satu sambungan TCP. Tidak seperti HTTP, WebSocket membenarkan pelayan menghantar data secara aktif kepada klien tanpa memerlukan klien membuat permintaan. Disebabkan kependamannya yang rendah dan kecekapan tinggi, WebSocket sangat popular dalam aplikasi masa nyata, seperti aplikasi sembang, penghantaran data masa nyata, dsb.

NPM menggunakan Nginx untuk mengendalikan permintaan HTTP dan HTTPS serta menyediakan fungsi proksi terbalik. Untuk mencapai komunikasi yang cekap dengan WebSocket, kami perlu mengkonfigurasi NPM untuk memajukan permintaan WebSocket dan mengendalikan maklumat pengepala berkaitan dengan betul. Berikut ialah contoh konfigurasi Nginx yang mudah:

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;
    }
}

Dalam konfigurasi di atas, kami menggunakan dua blok lokasi untuk mengendalikan permintaan WebSocket. Blok lokasi pertama digunakan untuk mengendalikan permintaan WebSocket di bawah laluan akar, manakala blok lokasi kedua digunakan untuk mengendalikan permintaan WebSocket bermula dengan /ws/. Dalam dua blok lokasi ini, kami menggunakan arahan proxy_pass untuk memajukan permintaan ke pelayan hujung belakang dan menetapkan maklumat pengepala HTTP yang berkaitan untuk memastikan permintaan WebSocket boleh dihantar dengan betul ke pelayan hujung belakang.

Selain mengkonfigurasi Nginx, kami juga perlu melaksanakan logik berkaitan WebSocket pada pelayan bahagian belakang. Berikut ialah contoh mudah yang dilaksanakan menggunakan Node.js dan perpustakaan 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!');
});

Dalam kod di atas, kami mencipta pelayan WebSocket dan mengendalikan sambungan baharu dalam acara sambungan. Dalam pengendali acara sambungan, kami boleh mengendalikan mesej daripada pelanggan dan menghantar respons.

Menggunakan konfigurasi Nginx dan kod pelayan WebSocket di atas, kami boleh mencapai komunikasi yang cekap antara NPM dan WebSocket. Sebagai contoh, kita boleh menggunakan NPM untuk mengendalikan permintaan HTTP dan memajukan permintaan WebSocket pada URL tertentu ke pelayan WebSocket bahagian belakang. Dengan cara ini, kita boleh menggunakan HTTP dan WebSocket di bawah nama domain yang sama, dan permintaan WebSocket boleh diuruskan oleh NPM seperti permintaan HTTP yang lain.

Ringkasnya, dengan mengkonfigurasi NPM dengan betul dan melaksanakan kod pelayan WebSocket bahagian belakang, kami boleh mencapai komunikasi yang cekap antara NPM dan WebSocket. Ini membolehkan kami mengendalikan permintaan WebSocket dengan mudah semasa menggunakan NPM dan melaksanakan keupayaan komunikasi masa nyata yang diperlukan untuk aplikasi masa nyata. Saya harap contoh kod dan penjelasan dalam artikel ini berguna!

Atas ialah kandungan terperinci Pelaksanaan komunikasi yang cekap antara Pengurus Proksi Nginx dan WebSocket. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn