Exécutez plusieurs serveurs sur le même port

19

Je voudrais exécuter un serveur XAMPP et un serveur Nodejs sur le port 80.

Si le serveur reçoit une requête HTTP, alors XAMPP la traitera, si le serveur obtient une requête Websocket, alors Nodejs

Comment est-ce possible? Si un port est déjà utilisé, je ne peux pas démarrer l'autre programme serveur.

itérateur
la source

Réponses:

45

Pour ce faire, vous devez utiliser un proxy inverse, par exemple Apache 2.4. avec mod_proxy_wstunnel .

Utilisez-le comme frontal, puis tunnelez les connexions vers le backend approprié.

Sven
la source
22

Un seul processus peut écouter sur un port particulier la même adresse IP et le même protocole, sinon le système d'exploitation ne saurait pas à quel processus envoyer le paquet reçu.

Pour obtenir ce que vous voulez, vous devrez utiliser un proxy inverse qui écoutera sur le port 80 et acheminera le trafic vers la bonne destination. Il existe plusieurs façons de procéder. Par exemple, vous pouvez configurer votre serveur Web (Apache) pour transférer les demandes WebSocket ou vous pouvez configurer Node.js pour transférer le trafic HTTP. Recherchez les options disponibles et choisissez celle qui correspond le mieux à vos besoins.

grekasius
la source
3

En plus de l'option de proxy inverse que d'autres ont déjà mentionnée, vous pouvez avoir plusieurs adresses IP attribuées à la machine. Cela peut coûter pour IPv4 (ou tout simplement ne pas être disponible selon l'endroit où votre serveur est hébergé) mais ne devrait pas l'être si vous êtes en mesure d'utiliser IPv6 (c'est-à-dire si les personnes se connectant à l'un ou aux deux ou à vos services seront capables d'IPv6) . De cette façon, les deux services peuvent écouter sur le port 80 sur des adresses différentes.

Comme vous ne mentionnez que le port 80, je suppose que vous n'utilisez pas HTTPS. Si vous l'êtes, si vous utilisez l'option de proxy inverse, vous devez avoir besoin d'un certificat SSL multi-nom ou configurer SNI et vivre avec le fait que certains anciens clients (IE sur XP, anciennes versions d'Android) ne pourront pas se connecter sans erreurs. L'option d'adresse multiple contourne ce problème au détriment de la ou des adresses supplémentaires attribuées.

David Spillett
la source
Juste un petit point: si vous utilisez déjà NAT pour traduire l'IP, vous pouvez également y rediriger le port. Par exemple, si vous exécutez un serveur Apache accessible sur Internet et que vous souhaitez utiliser XAMPP pour les tests, exécutez Apache sur un port non standard et demandez au port externe NAT du routeur 80 de demander le port non standard de l'IP interne. Cela permettrait d'exécuter XAMPP sur le port 80.
Calrion