


Bagaimana untuk menyelesaikan masalah perkhidmatan proksi nginx socket.io
nginx bertindak sebagai proksi untuk dua pelayan socket.io. Mod kerja socket.io sedang mengundi dan menaik taraf kepada websocket
Fenomena
Apabila meminta perkhidmatan melalui nginx, sejumlah besar 400 ralat muncul dinaik taraf kepada websocket Kadangkala ia terus melaporkan ralat. Tetapi apabila mengakses terus melalui ip+端口
, ia 100% berjaya.
Analisis
sid
sid adalah kunci kepada masalah kita. Apabila pada mulanya membuat sambungan (mod pengundian mensimulasikan sambungan yang panjang), pelanggan akan memulakan permintaan sedemikian:
https://***/?eio=3&transport=polling&t=1540820717277-0
Selepas menerimanya, pelayan akan mencipta objek, mengikatnya pada sambungan dan mengembalikan sid (id sesi) untuk menandakan sesi. Apakah maksud sesi? Sesi ialah satu siri interaksi, dan interaksi ini berkaitan Dalam senario kami, apabila permintaan http seterusnya datang, saya perlu mencari sambungan panjang yang sebelum ini terikat dengan teori (belum di sini) websocket, secara teorinya). Kami tahu bahawa permintaan http adalah tanpa kewarganegaraan dan setiap permintaan adalah bebas, jadi socket.io memperkenalkan sid untuk melakukan ini. Selepas menerima permintaan, pelayan akan menjana sid. Lihat jawapannya:
Salin kod adalah seperti berikut:
{"sid":"eogal3frqlptoalp5est", "upgrades":["websocket"] ,"pinginterval":8000,"pingtimeout":10000}
Setiap permintaan selepas ini perlu membawa sid ini, dan sambungan untuk mewujudkan permintaan websocket tidak terkecuali. Oleh itu, sid adalah kunci kepada pengundian dan menaik taraf pengundian kepada soket web. Permintaan selepas ini adalah serupa dengan:
https://***/?eio=3&transport=polling&t=1540820717314-1&sid=eogal3frqlptoalp5est or wss://***/?eio=3&transport=websocket&t=1540820717314-1&sid=eogal3frqlptoalp5est
Maka persoalannya, apakah yang berlaku jika sid dalam permintaan tidak dijana oleh pelayan? Pelayan tidak akan mengenalinya dan akan mengembalikan 400 kepada anda dan memberitahu anda
invalid sid
Ini adalah masalah yang kami hadapi Strategi pengimbangan beban lalai nginx adalah pengundian, jadi permintaan mungkin tidak dihasilkan pergi ke mesin dengan SID ini, kita akan menerima 400 pada masa ini Jika kita bernasib baik, ia mungkin dihantar ke mesin asal Jika kita bernasib baik, kita boleh bertahan sehingga sambungan websocket diwujudkan.
Penyelesaian
Berikut adalah dua penyelesaian
nginx load balancing menggunakan ip_hash, yang boleh menjamin permintaan pelanggan Semua pergi ke pelayan
Jangan gunakan mod pengundian, hanya gunakan soket web
Kedua-dua pilihan mempunyai kebaikan dan keburukan tersendiri. Perkara kedua yang jelas ialah penyemak imbas dan pelanggan lama yang tidak menyokong soket web tidak akan berfungsi. Jenis masalah pertama disembunyikan dengan lebih mendalam. Bayangkan apa yang akan berlaku jika anda menambah atau mengalih keluar mesin Pada masa ini, mod dasar ip_hash akan berubah, dan semua sambungan sebelumnya akan menjadi tidak sah operasi yang kerap. (Terutama apabila produk dalam peringkat pembangunan), pengembangan dan pengecutan lossy ini kemungkinan besar tidak boleh diterima.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah perkhidmatan proksi nginx socket.io. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Di Linux, gunakan arahan berikut untuk memeriksa sama ada nginx dimulakan: Hakim status SistemCTL Nginx berdasarkan output arahan: Jika "Aktif: Aktif (Running)" dipaparkan, Nginx dimulakan. Jika "aktif: tidak aktif (mati)" dipaparkan, nginx dihentikan.

Bagaimana cara mengkonfigurasi nginx di Windows? Pasang Nginx dan buat konfigurasi hos maya. Ubah suai fail konfigurasi utama dan sertakan konfigurasi hos maya. Mulakan atau Muat semula Nginx. Uji konfigurasi dan lihat laman web. Selektif membolehkan SSL dan mengkonfigurasi sijil SSL. Selektif tetapkan firewall untuk membolehkan trafik port 80 dan 443.

Bagaimana untuk mengesahkan sama ada nginx dimulakan: 1. Gunakan baris arahan: status sistem sistem nginx (linux/unix), netstat -ano | Findstr 80 (Windows); 2. Periksa sama ada port 80 dibuka; 3. Semak mesej permulaan Nginx dalam log sistem; 4. Gunakan alat pihak ketiga, seperti Nagios, Zabbix, dan Icinga.

Langkah -langkah untuk memulakan Nginx di Linux: Periksa sama ada Nginx dipasang. Gunakan SistemCTL Mula Nginx untuk memulakan perkhidmatan Nginx. Gunakan SistemCTL Dayakan NGINX untuk membolehkan permulaan automatik Nginx pada permulaan sistem. Gunakan Status SistemCTL Nginx untuk mengesahkan bahawa permulaan berjaya. Lawati http: // localhost dalam pelayar web untuk melihat halaman selamat datang lalai.

Bagaimana untuk memperbaiki kesilapan dilarang nginx 403? Semak keizinan fail atau direktori; 2. Semak .htaccess File; 3. Semak fail konfigurasi nginx; 4. Mulakan semula nginx. Penyebab lain yang mungkin termasuk peraturan firewall, tetapan selinux, atau isu aplikasi.

Jawab kepada Soalan: 304 Tidak diubahsuai ralat menunjukkan bahawa penyemak imbas telah cache versi sumber terkini permintaan klien. Penyelesaian: 1. Kosongkan cache penyemak imbas; 2. Lumpuhkan cache penyemak imbas; 3. Konfigurasi nginx untuk membolehkan cache pelanggan; 4. Periksa keizinan fail; 5. Semak fail hash; 6. Lumpuhkan CDN atau cache proksi terbalik; 7. Mulakan semula nginx.

Memulakan pelayan Nginx memerlukan langkah-langkah yang berbeza mengikut sistem operasi yang berbeza: Sistem Linux/Unix: Pasang pakej Nginx (contohnya, menggunakan apt-get atau yum). Gunakan SystemCTL untuk memulakan perkhidmatan Nginx (contohnya, SUDO SystemCTL Mula Nginx). Sistem Windows: Muat turun dan pasang fail binari Windows. Mula Nginx menggunakan nginx.exe executable (contohnya, nginx.exe -c conf \ nginx.conf). Tidak kira sistem operasi yang anda gunakan, anda boleh mengakses IP pelayan

Pelayan tidak mempunyai kebenaran untuk mengakses sumber yang diminta, mengakibatkan ralat NGINX 403. Penyelesaian termasuk: Periksa keizinan fail. Semak konfigurasi .htaccess. Semak konfigurasi Nginx. Konfigurasikan keizinan Selinux. Semak peraturan firewall. Menyelesaikan masalah lain seperti masalah penyemak imbas, kegagalan pelayan, atau kesilapan lain yang mungkin.
