Sebagai pelayan web berprestasi tinggi dan pelayan proksi terbalik, Nginx juga mempunyai kaedah konfigurasi uniknya sendiri dalam mengendalikan permintaan WebSocket. WebSocket ialah protokol berasaskan TCP Penubuhan sambungan WebSocket memerlukan jabat tangan tiga hala Selepas jabat tangan selesai, komunikasi dua hala boleh berlaku antara klien dan pelayan. Di bawah, kami akan memperkenalkan cara melaksanakan konfigurasi WebSocket dalam Nginx, dengan contoh kod khusus.
Pertama, anda perlu menambah konfigurasi berkaitan WebSocket pada fail konfigurasi Nginx.
http { ... upstream websocket { server localhost:9001; } ... map $http_upgrade $connection_upgrade { default upgrade; '' close; } ... server { listen 80; server_name example.com; location / { proxy_pass http://websocket; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $host; } ... } ... }
Dalam konfigurasi di atas, kami menambah huluan bernama "websocket" untuk menentukan alamat pelayan sasaran dan port WebSocket. Pada masa yang sama, arahan peta digunakan untuk memetakan $http_upgrade (pengepala permintaan naik taraf pelanggan) dan $connection_upgrade (pengepala permintaan naik taraf nginx). Dengan cara ini, dengan menambahkan medan "Naik Taraf" dan "Sambungan" pada pengepala permintaan naik taraf pelanggan, Nginx boleh dicetuskan untuk menaik taraf protokol HTTP kepada protokol WebSocket, sekali gus mencapai komunikasi dua hala.
Dalam blok pelayan, kami menggunakan arahan proxy_pass untuk memproksi semua permintaan WebSocket ke huluan soket web, dan menetapkan versi protokol dan meminta maklumat pengepala. Perlu diingat bahawa apabila membuat proksi WebSocket dalam Nginx, pengepala permintaan "Naik taraf" dan "Sambungan" mesti dihantar ke pelayan sasaran bersama-sama, jika tidak sambungan akan ditutup, jadi kedua-dua pengepala permintaan ini mesti ditetapkan secara manual melalui arahan proxy_set_header .
Selain itu, perlu diperhatikan bahawa dalam konfigurasi di atas, kami hanya mendengar port HTTP (80) Jika anda perlu mengkonfigurasi WebSocket di bawah HTTPS, anda perlu menambah arahan berikut dalam blok pelayan:
listen 443 ssl; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem;
. Arahan di atas digunakan untuk memantau port HTTPS (443), dan menentukan laluan dan nama sijil dan fail kunci.
Berikut ialah contoh kod pelayan WebSocket khusus, dilaksanakan menggunakan Node.js:
const WebSocket = require('ws'); const server = new WebSocket.Server({ port: 9001 }); server.on('connection', (socket, req) => { console.log('Client connected'); socket.on('message', (message) => { console.log(`Received message: ${message}`); socket.send(`Your message: ${message}`); }); socket.on('close', () => { console.log('Client disconnected'); }); });
Dalam kod ini, kami mencipta pelayan WebSocket dan mendengar port 9001. Selepas sambungan diwujudkan, kami mengeluarkan maklumat "Pelanggan disambungkan", dan selepas menerima mesej pelanggan, kembalikan mesej itu kepada pelanggan, kemudian dengar acara penutup, dan keluarkan maklumat "Pelanggan diputuskan".
Dengan contoh kod dan konfigurasi di atas, kami boleh melaksanakan kerja proksi dan komunikasi protokol WebSocket dalam Nginx. Perlu diingatkan bahawa masih terdapat sekatan tertentu pada penggunaan protokol WebSocket Secara khusus, proses penubuhan sambungan WebSocket adalah serupa dengan protokol HTTP/HTTPS Walau bagaimanapun, apabila sambungan berjaya diwujudkan, komunikasi antara kedua-duanya pihak bergantung sepenuhnya pada protokol WebSocket Ia tidak lagi bergantung pada protokol HTTP/HTTPS. Oleh itu, apabila menggunakan protokol WebSocket, anda perlu mengelakkan beberapa sekatan pembangunan Web konvensional, dan pada masa yang sama, anda juga mesti memberi perhatian kepada isu seperti keselamatan dan kestabilan.
Atas ialah kandungan terperinci Bagaimana Nginx melaksanakan konfigurasi WebSocket. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!