Uruchom wiele serwerów na tym samym porcie

19

Chciałbym uruchomić serwer XAMPP i serwer Nodejs na porcie 80.

Jeśli serwer otrzyma żądanie HTTP, XAMPP będzie je obsługiwał, jeśli serwer otrzyma żądanie Websocket, wtedy Nodejs

Jak to jest możliwe? Jeśli port jest już zajęty, nie mogę uruchomić innego programu serwera.

iter-ator
źródło

Odpowiedzi:

45

Aby to zrobić, musisz użyć odwrotnego proxy, np. Apache 2.4. z mod_proxy_wstunnel .

Użyj go jako interfejsu, a następnie tuneluj połączenia z odpowiednim zapleczem.

Sven
źródło
22

Tylko jeden proces może nasłuchiwać na określonym porcie dla tego samego adresu IP i protokołu, ponieważ w przeciwnym razie system operacyjny nie wiedziałby, do którego procesu wysłać odebrany pakiet.

Aby osiągnąć to, co chcesz, będziesz musiał użyć zwrotnego serwera proxy, który nasłuchuje na porcie 80 i przekieruje ruch do właściwego miejsca docelowego. Można to zrobić na wiele sposobów. Na przykład możesz skonfigurować serwer WWW (Apache) do przekazywania żądań WebSocket lub możesz skonfigurować Node.js do przekazywania ruchu HTTP. Przeszukaj dostępne opcje i wybierz tę, która najlepiej odpowiada Twoim potrzebom.

grekasius
źródło
3

Oprócz opcji odwrotnego proxy, o której inni już wspominali, do urządzenia można przypisać wiele adresów IP. Może to kosztować IPv4 (lub po prostu być niedostępne w zależności od tego, gdzie serwer jest hostowany), ale nie powinno, jeśli masz możliwość korzystania z IPv6 (tj. Jeśli osoby łączące się z jedną lub obiema usługami będą mogły obsługiwać IPv6) . W ten sposób obie usługi mogą nasłuchiwać na porcie 80 pod różnymi adresami.

Ponieważ wspominasz tylko o porcie 80, zakładam, że nie używasz HTTPS. Jeśli tak, jeśli korzystasz z opcji odwrotnego proxy, musisz mieć certyfikat SSL z wieloma nazwami lub skonfigurować SNI i żyć z faktem, że niektórzy starzy klienci (IE na XP, stare wersje Androida) nie będą w stanie połączyć bez błędów. Opcja wielokrotnego adresu pozwala obejść ten problem kosztem konieczności przypisania dodatkowego adresu (adresów).

David Spillett
źródło
Drobna uwaga: jeśli już używasz translacji adresów NAT do translacji adresów IP, możesz również tam przekierować port. Na przykład, jeśli korzystasz z dostępnego do Internetu serwera Apache i chcesz użyć XAMPP do testowania, uruchom Apache na niestandardowym porcie i poproś router zewnętrzny o 80 żądań NAT do niestandardowego portu wewnętrznego IP. Umożliwiłoby to uruchomienie XAMPP na porcie 80.
Calrion