Saya mencoba mengkonfigurasi Apache 2.4 untuk mem-proxy-kan koneksi websocket untuk socket.io ke server websocket node.js, menggunakan mod_proxy_wstunnel. Kami memiliki ini berfungsi dengan baik dengan socket.io 0.9, tetapi dengan rilis 1.0 mereka mengubah soket endpoint menjadi parameter kueri, dan sekarang saya mengalami kesulitan mengkonfigurasi apache dengan instruksi proxy yang benar.
Semua permintaan ke /socket.io/?EIO=N&transport=websocket
(di mana N adalah angka berapa pun, biasanya 2) perlu diteruskan ke ws://localhost:8082/socket.io/
, tetapi semua permintaan lainnya harus diteruskan ke http://localhost:8082/socket.io/
.
Saya sudah mencoba variasi kedua konfigurasi berikut:
ProxyPass /socket.io/?EIO=2&transport=websocket http://localhost:8082/socket.io/?EIO=2&transport=websocket
ProxyPassReverse /socket.io/?EIO=2&transport=websocket http://localhost:8082/socket.io/?EIO=2&transport=websocket
ProxyPass /socket.io/ http://localhost:8082/socket.io/
ProxyPassReverse /socket.io/ http://localhost:8082/socket.io/
.
RewriteRule /socket.io/?EIO=([0-9]+)&transport=websocket ws://localhost:8082/socket.io/ [QSA,P]
ProxyPass /socket.io/ http://localhost:8082/socket.io/
ProxyPassReverse /socket.io/ http://localhost:8082/socket.io/
Saya telah mengumpulkan dari Google bahwa ProxyPass dan Lokasi tidak dapat menargetkan string kueri, jadi apakah ada opsi lain di sini? Jalur-jalur tersebut dikodekan dengan keras menjadi socket.io, sehingga singkat dari memalsukan seluruh perpustakaan saya tidak dapat mengubahnya.
sumber
forcing proxy-throughput with http://[REDACTED].dev/ws://localhost:8082/socket.io/
(domain.dev<VirtualHost>
blok sesuai urutan yang dijelaskan, bahkan jika Anda menggunakan root dokumen (misalnya/var/www/html
). Saya menghabiskan hampir 2 jam mencoba mencari tahu mengapa perubahan ini tidak berfungsi dengan baik, hanya untuk mengetahui bahwaRewriteRule
itu tidak berfungsi pada tingkat roothttpd.conf
(walaupunProxyPass
berfungsi). TheProxyPass
arahan tidak bekerja di<Directory>
blok atau.htaccess
file (meskipunRewriteRule
's lakukan), sehingga tempat yang logis untuk kelompok perubahan ini adalah di<VirtualHost>
.