Führen Sie mehrere Server am gleichen Port aus

19

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

Wenn der Server eine HTTP-Anforderung erhält, verarbeitet XAMPP diese, wenn der Server eine Websocket-Anforderung erhält, Nodejs

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

iter-ator
quelle

Antworten:

45

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

Verwenden Sie es als Frontend und tunneln Sie die Verbindungen zum entsprechenden Backend.

Sven
quelle
22

Nur ein einzelner Prozess kann einen bestimmten Port auf dieselbe IP-Adresse und dasselbe Protokoll überwachen, da das Betriebssystem sonst nicht weiß, an welchen Prozess das empfangene Paket gesendet werden soll.

Um das zu erreichen, was Sie möchten, müssen Sie einen Reverse-Proxy verwenden, der Port 80 überwacht und den Datenverkehr zum richtigen Ziel weiterleitet. Hierfür gibt es mehrere Möglichkeiten. Beispielsweise können Sie Ihren Webserver (Apache) so einrichten, dass WebSocket-Anforderungen weitergeleitet werden, oder Sie können Node.js so konfigurieren, dass HTTP-Datenverkehr weitergeleitet wird. Informieren Sie sich über die verfügbaren Optionen und wählen Sie die, die Ihren Anforderungen am besten entspricht.

Grekasius
quelle
3

Neben der bereits erwähnten Reverse-Proxy-Option können dem Computer mehrere IP-Adressen zugewiesen werden. Dies kann IPv4 kosten (oder ist einfach nicht verfügbar, je nachdem, wo Ihr Server gehostet wird), sollte aber nicht sein, wenn Sie IPv6 verwenden können (dh wenn die Personen, die eine Verbindung zu einem oder beiden herstellen, oder Ihre Dienste IPv6-fähig sind). . Auf diese Weise können beide Dienste Port 80 an verschiedenen Adressen überwachen.

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 damit leben, dass einige alte Clients (IE unter XP, alte Android-Versionen) dies nicht können Verbindung ohne Fehler. Die Option für mehrere Adressen umgeht dieses Problem auf Kosten der zusätzlichen zugewiesenen Adressen.

David Spillett
quelle
Nur ein kleiner Punkt: Wenn Sie NAT bereits zum Übersetzen der IP verwenden, können Sie die Portumleitung auch dort durchführen. Wenn Sie beispielsweise einen über das 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 die Anforderungen des externen NAT-Ports 80 des Routers an den nicht standardmäßigen Port der internen IP senden. Auf diese Weise kann XAMPP auf Port 80 ausgeführt werden.
Calrion,