Frage Führen Sie mehrere Server am selben Port aus


Ich möchte einen XAMPP-Server und einen Nodejs-Server am Port 80 betreiben.

Wenn der Server eine HTTP-Anfrage erhält, wird XAMPP damit umgehen, wenn der Server eine Websocket-Anfrage bekommt, dann Nodejs

Wie ist es möglich? Wenn ein Port bereits verwendet wird, kann ich das andere Serverprogramm nicht starten.


18
2017-08-27 12:00


Ursprung




Antworten:


Sie müssten hierfür einen Reverse-Proxy verwenden, z. Apache 2.4. mit mod_proxy_wstunnel.

Verwenden Sie es als ein Frontend und tunneln Sie dann die Verbindungen zu dem entsprechenden Back-End.


44
2017-08-27 12:25





Nur ein einziger Prozess kann einen bestimmten Port für dieselbe IP-Adresse und dasselbe Protokoll abhören, da das Betriebssystem ansonsten nicht weiß, an welchen Prozess das empfangene Paket gesendet werden soll.

Um zu erreichen, was Sie wollen, müssen Sie ein verwenden Reverse-Proxy Das empfängt Port 80 und leitet den Verkehr an das richtige Ziel weiter. Es gibt mehrere Möglichkeiten, dies zu tun. Zum Beispiel können Sie Ihren Webserver (Apache) so einrichten, dass er WebSocket-Anfragen weiterleitet, oder Sie können Node.js so konfigurieren, dass er HTTP-Datenverkehr weiterleitet. Suchen Sie nach verfügbaren Optionen und wählen Sie diejenige aus, die am besten zu Ihren Bedürfnissen passt.


22
2017-08-27 12:29





Neben der Reverse-Proxy-Option, die andere bereits erwähnt haben, könnten Sie dem Gerät mehrere IP-Adressen zuweisen. Dies kann für IPv4 kosten (oder einfach nicht verfügbar sein, abhängig davon, wo Ihr Server gehostet wird), sollte aber nicht, wenn Sie in der Lage sind, IPv6 zu verwenden (dh wenn die Leute, die sich mit einem oder beiden verbinden, IPv6-fähig sein werden) . Auf diese Weise können beide Dienste den Port 80 an verschiedenen Adressen abhören.

Da Sie nur Port 80 erwähnen, gehe ich davon aus, dass Sie kein HTTPS verwenden. Wenn Sie dann die Reverse-Proxy-Option verwenden, müssen Sie entweder ein SSL-Zertifikat mit mehreren Namen haben oder SNI konfigurieren und mit der Tatsache leben, dass einige alte Clients (IE unter XP, alte Android-Versionen) nicht in der Lage sind Verbindung ohne Fehler. Die Option für mehrere Adressen umgeht dieses Problem auf Kosten der zusätzlichen zugewiesenen Adresse (n).


3
2017-08-28 14:44



Nur ein kleiner Punkt: Wenn Sie bereits NAT verwenden, um die IP zu übersetzen, können Sie dort auch die Portumleitung vornehmen. Z.B. Wenn Sie einen mit dem Internet zugänglichen Apache-Server betreiben und XAMPP zum Testen verwenden möchten, führen Sie Apache auf einem nicht standardmäßigen Port aus und lassen Sie den externen NAT-Port des Routers 80 an den nicht standardmäßigen Port der internen IP-Adresse senden. Dies würde das Ausführen von XAMPP auf Port 80 ermöglichen. - Calrion