Jalankan beberapa server pada port yang sama

19

Saya ingin menjalankan server XAMPP, dan server Nodejs pada port 80.

Jika server mendapatkan permintaan HTTP, maka XAMPP akan menanganinya, jika server mendapatkan permintaan Websocket, maka Nodejs

Bagaimana itu mungkin? Jika port sudah digunakan, maka saya tidak bisa memulai program server lainnya.

iter-ator
sumber

Jawaban:

45

Anda perlu menggunakan proksi terbalik untuk melakukan ini, mis. Apache 2.4. dengan mod_proxy_wstunnel .

Gunakan sebagai frontend dan kemudian tunnel koneksi ke backend yang sesuai.

Sven
sumber
22

Hanya satu proses yang dapat mendengarkan pada port tertentu untuk alamat IP dan protokol yang sama, karena jika tidak, sistem operasi tidak akan tahu proses untuk mengirim paket yang diterima.

Untuk mencapai apa yang Anda inginkan, Anda harus menggunakan proxy terbalik yang akan mendengarkan pada port 80 dan meneruskan lalu lintas ke tujuan yang benar. Ada beberapa cara untuk melakukan ini. Misalnya Anda dapat mengatur server web Anda (Apache) untuk meneruskan permintaan WebSocket atau Anda dapat mengkonfigurasi Node.js untuk meneruskan lalu lintas HTTP. Teliti pilihan yang tersedia dan pilih satu yang paling sesuai dengan kebutuhan Anda.

grekasius
sumber
3

Seperti halnya opsi reverse proxy yang telah disebutkan orang lain, Anda dapat memiliki beberapa alamat IP yang ditetapkan untuk mesin. Ini mungkin dikenakan biaya untuk IPv4 (atau hanya tidak tersedia tergantung di mana server Anda di-host) tetapi tidak boleh jika Anda berada dalam posisi untuk menggunakan IPv6 (yaitu jika orang yang terhubung ke satu atau keduanya atau layanan Anda akan mampu IPv6) . Dengan cara ini kedua layanan dapat mendengarkan pada port 80 pada alamat yang berbeda.

Karena Anda hanya menyebutkan port 80, saya berasumsi bahwa Anda tidak menggunakan HTTPS. Jika ya, jika menggunakan opsi proxy terbalik, Anda harus memiliki sertifikat SSL multi-nama atau mengonfigurasi SNI dan hidup dengan kenyataan bahwa beberapa klien lama (IE pada XP, versi Android lama) tidak akan dapat terhubung tanpa kesalahan. Opsi beberapa alamat menghindari masalah ini dengan mengorbankan kebutuhan alamat tambahan yang ditugaskan.

David Spillett
sumber
Hanya satu poin kecil: jika Anda sudah menggunakan NAT untuk menerjemahkan IP, Anda dapat melakukan pengalihan port di sana juga. Misalnya jika Anda menjalankan server Apache yang dapat diakses Internet & ingin menggunakan XAMPP untuk pengujian, jalankan Apache pada port non-standar dan minta port eksternal NAT router 80 ke port non-standar IP internal. Ini akan memungkinkan menjalankan XAMPP pada port 80.
Calrion