19 votes

Exécuter plusieurs serveurs sur le même port

Je voudrais faire fonctionner un serveur XAMPP et un serveur Nodejs sur le port 80.

Si le serveur reçoit une requête HTTP, XAMPP s'en charge, si le serveur reçoit une requête Websocket, Nodejs s'en charge.

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

45voto

Sven Points 95985

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

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

22voto

Debiprasad Points 647

Un seul processus peut écouter sur un port particulier pour la même adresse IP et le même protocole, car 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 système de contrôle de la qualité. reverse proxy qui écoutera sur le port 80 et transmettra 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 requêtes 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.

3voto

David Spillett Points 22424

En plus de l'option de proxy inverse que d'autres ont déjà mentionnée, vous pourriez avoir plusieurs adresses IP attribuées à la machine. Cela peut coûter cher pour IPv4 (ou simplement ne pas être disponible en fonction de 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 de vos services sont capables d'utiliser IPv6). De cette façon, les deux services peuvent écouter le port 80 sur des adresses différentes.

Comme vous ne mentionnez que le port 80, je suppose que vous n'utilisez pas le protocole HTTPS. Si c'est le cas, si vous utilisez l'option de proxy inverse, vous devez soit avoir un certificat SSL multi-nom, soit configurer SNI et accepter le fait que certains anciens clients (IE sous XP, anciennes versions d'Android) ne pourront pas se connecter sans erreur. L'option d'adresses multiples permet de contourner ce problème au prix de l'attribution d'une ou plusieurs adresses supplémentaires.

0 votes

Juste un petit point : si vous utilisez déjà le NAT pour traduire l'IP, vous pouvez également effectuer la redirection de port à cet endroit. Par exemple, si vous utilisez un serveur Apache accessible par Internet et que vous voulez utiliser XAMPP pour des tests, exécutez Apache sur un port non standard et demandez au routeur de NATer les demandes du port 80 externe vers le port non standard de l'IP interne. Cela permet d'utiliser XAMPP sur le port 80.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X