Esegui più server sulla stessa porta


19

Vorrei eseguire un server XAMPP e un server Nodejs sulla porta 80.

Se il server riceve una richiesta HTTP, XAMPP la gestirà, se il server riceve una richiesta Websocket, quindi Nodejs

Come è possibile? Se una porta è già in uso, non posso avviare l'altro programma server.

Risposte:


45

A tale scopo, è necessario utilizzare un proxy inverso, ad esempio Apache 2.4. con mod_proxy_wstunnel .

Usalo come frontend e quindi tunnel i collegamenti al backend appropriato.


22

Solo un singolo processo può ascoltare su una determinata porta lo stesso indirizzo IP e protocollo, perché altrimenti il ​​sistema operativo non saprebbe a quale processo inviare il pacchetto ricevuto.

Per ottenere ciò che desideri, dovrai utilizzare un proxy inverso che ascolterà sulla porta 80 e inoltri il traffico alla destinazione corretta. Esistono diversi modi per farlo. Ad esempio, è possibile configurare il server Web (Apache) per l'inoltro delle richieste WebSocket oppure è possibile configurare Node.js per l'inoltro del traffico HTTP. Cerca le opzioni disponibili e scegli quella più adatta alle tue esigenze.


3

Oltre all'opzione proxy inverso già menzionata da altri, è possibile che al computer siano assegnati più indirizzi IP. Questo può costare IPv4 (o semplicemente non essere disponibile a seconda di dove è ospitato il tuo server) ma non dovrebbe essere se sei in grado di usare IPv6 (cioè se le persone che si collegano a uno o entrambi o i tuoi servizi saranno in grado di IPv6) . In questo modo entrambi i servizi possono ascoltare sulla porta 80 su indirizzi diversi.

Dato che menzionate solo la porta 80, suppongo che non state usando HTTPS. In tal caso, se si utilizza l'opzione proxy inverso, è necessario disporre di un certificato SSL multi-nome o configurare SNI e convivere con il fatto che alcuni vecchi client (IE su XP, vecchie versioni di Android) non saranno in grado di connettersi senza errori. L'opzione di indirizzo multiplo elude questo problema a spese della necessità degli indirizzi aggiuntivi assegnati.


Solo un piccolo punto: se stai già utilizzando NAT per tradurre l'IP, puoi fare anche il reindirizzamento delle porte. Ad esempio, se si esegue un server Apache accessibile da Internet e si desidera utilizzare XAMPP per i test, eseguire Apache su una porta non standard e fare in modo che la porta esterna NAT del router 80 richieda la porta non standard dell'IP interno. Ciò consentirebbe l'esecuzione di XAMPP sulla porta 80.
Calrion,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.