Ini menambahkan untuk jawaban @Andrew Moss tentang cara mengkonfigurasi dengan benar VirtualHost
untuk bekerja dengan socket.io 1.0! Jangan ragu untuk melewatkan bagian tentang CentOS!
Jika Anda terjebak pada CentOS 6, berikut ini cara melakukannya:
- Unduh sumber backported untuk
mod_proxy_wstunnel
modul di sini (baik mengkloning Intisari atau mengunduh file satu per satu)
- Instal semua yang diperlukan untuk membangun:
yum install make gcc httpd-devel
- Menyiapkan lingkungan RPM Build (pada dasarnya pengguna tidakrivil dan beberapa direktori)
- Salin
.c
file-ke dalam SOURCES
subfolder lingkungan dan .spec
-file ke dalam SPECS
subfolder.
- Menjalankan
rpmbuild -ba mod_proxy_wstunnel.spec
- Paket ini sekarang berada di
SRPMS
subfolder
- Instal paket:
rpm -i /path/to/package.rpm
- Keuntungan
Ini juga akan memuat modul secara otomatis di Apache, jadi Anda hanya perlu me-restart dengan service httpd restart
.
Menyiapkan VirtualHost
untuk benar-benar melayani server Socket.io dan skrip klien (yang secara default tersedia di bawah http://your.server/socket.io/socket.io.js
) sedikit lebih rumit di Apache 2.2, karena Bug dalam mod_proxy
modul :
Diberi aturan penulisan ulang berikut:
RewriteRule ^/ws(.*)$ ws://localhost:9000/ws [P]
mod_rewrite
memperlakukan ini suatu file tap sehingga log akses menunjukkan:
[26/Sep/2013:09:46:07 -0400] "GET /ws://localhost:9000/ws HTTP/1.1" 400 317
Jadi, Anda tidak dapat menggunakan ws
-protocol dalam aturan penulisan ulang , karena itu akan secara internal berubah menjadi permintaan GET HTTP.
Namun ada solusinya:
<VirtualHost *:80>
ServerName your.server
# Proxy socket.io Websocket
RewriteEngine On
# socket.io 1.0+ starts all connections with an HTTP polling request
RewriteCond %{QUERY_STRING} transport=polling [NC]
RewriteRule /(.*) http://localhost:8081/$1 [P]
ProxyRequests Off
# Explicitly send the request for the client-script to HTTP:
ProxyPass /socket.io/socket.io.js http://localhost:8081/socket.io/socket.io.js
ProxyPassReverse /socket.io/socket.io.js http://localhost:8081/socket.io/socket.io.js
# Anything else goes to the WebSocket protocol:
ProxyPass /socket.io/ ws://localhost:8081/socket.io/
ProxyPassReverse /socket.io/ ws://localhost:8081/socket.io/
# Any additional stuff (the actual site) comes here
ProxyPass / http://localhost:8081/
ProxyPassReverse / http://localhost:8081/
</VirtualHost>
Ini memastikan bahwa semua yang dikirim untuk /socket.io
pergi ke ws://
-protocol, kecuali permintaan polling panjang (yang merupakan mekanisme mundur ketika WebSockets tidak tersedia) dan permintaan untuk perpustakaan klien.
./buildconfig
untuk membuat file configure. Dan ada beberapa dependensi yang diminta untuk saya instal.