Saya sudah :
Apache
(v2.4) pada port 80 server saya untukwww.domain1.com
, dengan mod_proxy dan mod_proxy_wstunnel diaktifkannode.js + socket.io
pada port 3001 dari server yang sama.
Mengakses www.domain2.com
(dengan port 80) dialihkan ke 2. berkat metode yang dijelaskan di sini . Saya telah mengatur ini di konfigurasi Apache:
<VirtualHost *:80>
ServerName www.domain2.com
ProxyPass / http://localhost:3001/
ProxyPassReverse / http://localhost:3001/
ProxyPass / ws://localhost:3001/
ProxyPassReverse / ws://localhost:3001/
</VirtualHost>
Ia bekerja untuk semuanya, kecuali bagian websocket: ws://...
tidak dikirimkan seperti seharusnya oleh proxy.
Saat saya mengakses halaman di www.domain2.com
, saya memiliki:
Impossible to connect ws://www.domain2.com/socket.io/?EIO=3&transport=websocket&sid=n30rqg9AEqZIk5c9AABN.
Pertanyaan: Bagaimana cara membuat proxy Apache sebagai WebSockets juga?
RewriteCond %{QUERY_STRING} transport=websocket [NC]
tidak bekerja dengan benar. Menyarankan untuk menggunakanRewriteCond %{HTTP:Upgrade} =websocket [NC]
sebagai gantinya.Selain memfilter berdasarkan URL, Anda juga dapat memfilter berdasarkan header HTTP. Konfigurasi ini akan berfungsi untuk aplikasi web apa pun yang menggunakan websockets, juga jika mereka tidak menggunakan socket.io:
sumber
Semoga bermanfaat. Semua kueri dikirim melalui ws ke node
sumber
Mulai Socket.IO 1.0 (Mei 2014), semua koneksi dimulai dengan permintaan polling HTTP (info selengkapnya di sini ). Itu berarti selain meneruskan lalu lintas WebSocket, Anda perlu meneruskan
transport=polling
permintaan HTTP apa pun .Solusi di bawah ini harus mengarahkan semua lalu lintas soket dengan benar, tanpa mengalihkan lalu lintas lain.
Aktifkan mod Apache2 berikut:
Gunakan pengaturan ini di file * .conf Anda (misalnya
/etc/apache2/sites-available/mysite.com.conf
). Saya telah menyertakan komentar untuk menjelaskan setiap bagian:Saya telah menyertakan bagian tambahan untuk merutekan
/node
lalu lintas yang menurut saya berguna, lihat di sini untuk info lebih lanjut.sumber
RewriteRule /path/(.*)
Dengan bantuan dari jawaban ini, saya akhirnya mendapatkan proxy terbalik untuk Node-RED yang berjalan pada Raspberry Pi dengan Ubuntu Mate dan Apache2 berfungsi, menggunakan konfigurasi situs Apache2 ini:
Saya juga harus mengaktifkan modul seperti ini:
sumber
Bagi saya ini berfungsi setelah menambahkan hanya satu baris di httpd.conf seperti di bawah ini (garis tebal).
Versi Apache 2.4.6 di CentOS.
sumber
Setup saya:
/api/ws
Seperti yang disebutkan di atas oleh @Basj, pastikan proxy a2enmod dan ws_tunnel diaktifkan.
Ini adalah tangkapan layar dari file konfigurasi Apache yang memecahkan masalah saya:
Bagian yang relevan sebagai teks:
Semoga membantu.
sumber
Lakukan hal berikut untuk aplikasi pegas yang menjalankan konten statis, istirahat, dan websocket.
Apache digunakan sebagai Proxy dan SSL Endpoint untuk URI berikut:
Konfigurasi Apache
Saya menggunakan konfigurasi vHost yang sama untuk konfigurasi SSL, tidak perlu mengubah apa pun yang terkait dengan proxy.
Konfigurasi pegas
sumber
Gunakan tautan ini untuk solusi sempurna untuk ws https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html
Anda hanya perlu melakukan langkah di bawah ini ..
Pergi ke
/etc/apache2/mods-available
Langkah 1
Aktifkan
mode proxy_wstunnel.load
dengan menggunakan perintah di bawah iniLangkah 2
Pergi ke
/etc/apache2/sites-available
dan tambahkan baris di bawah ini di file .conf Anda di dalam virtual host
Catatan: 8080 berarti Anda bahwa tomcat Anda menjalankan port karena kami ingin menghubungkan
ws
tempat file War kami dimasukkan ke dalam tomcat dan tomcat melayani apachews
. Terima kasihKonfigurasi Saya
sumber
Untuk transportasi "pemungutan suara".
Sisi Apache:
Sisi klien:
sumber
Selain jawaban utama: jika Anda memiliki lebih dari satu layanan di server yang sama yang menggunakan websockets, Anda mungkin ingin melakukan ini untuk memisahkannya, dengan menggunakan jalur kustom (*):
Server node:
HTML klien:
Konfigurasi Apache:
(*) Catatan: menggunakan default
RewriteCond %{REQUEST_URI} ^/socket.io
tidak akan dikhususkan untuk situs web, dan permintaan websockets akan tercampur di antara situs web yang berbeda!sumber
MELAKUKAN:
Memiliki Apache 2.4 terinstal (tidak bekerja dengan 2.2),
a2enmod proxy
dana2enmod proxy_wstunnel.load
Lakukan ini di konfigurasi Apache
cukup tambahkan dua baris di file Anda di mana 8080 adalah porta tomcat Anda
sumber