19 votos

Ejecutar varios servidores en el mismo puerto

Me gustaría ejecutar un servidor XAMPP, y un servidor Nodejs en el puerto 80.

Si el servidor recibe una petición HTTP, entonces XAMPP la manejará, si el servidor recibe una petición Websocket, entonces Nodejs

¿Cómo es posible? Si un puerto ya está en uso, entonces no puedo iniciar el otro programa del servidor.

45voto

Sven Puntos 51980

Para ello, deberá utilizar un proxy inverso, por ejemplo, Apache 2.4. con mod_proxy_wstunnel .

Utilízalo como frontend y luego tuneliza las conexiones al backend correspondiente.

22voto

grekasius Puntos 1802

Sólo un único proceso puede escuchar en un puerto determinado para la misma dirección IP y el mismo protocolo, porque de lo contrario el sistema operativo no sabría a qué proceso enviar el paquete recibido.

Para conseguir lo que quieres tendrás que utilizar un proxy inverso que escuchará en el puerto 80 y reenviará el tráfico al destino correcto. Hay varias maneras de hacer esto. Por ejemplo, puedes configurar tu servidor web (Apache) para que reenvíe las peticiones WebSocket o puedes configurar Node.js para que reenvíe el tráfico HTTP. Investiga las opciones disponibles y elige la que mejor se adapte a tus necesidades.

3voto

David Spillett Puntos 18934

Además de la opción del proxy inverso que otros ya han mencionado, podrías tener múltiples direcciones IP asignadas a la máquina. Esto puede costar para IPv4 (o simplemente no estar disponible dependiendo de dónde esté alojado tu servidor) pero no debería si estás en posición de usar IPv6 (es decir, si las personas que se conectan a uno o ambos de tus servicios van a ser capaces de IPv6). De esta manera ambos servicios pueden escuchar en el puerto 80 en diferentes direcciones.

Como sólo mencionas el puerto 80 asumo que no estás usando HTTPS. Si es así, si se utiliza la opción de proxy inverso es necesario tener un certificado SSL multi-nombre o configurar SNI y vivir con el hecho de que algunos clientes antiguos (IE en XP, las versiones antiguas de Android) no será capaz de conectarse sin errores. La opción de direcciones múltiples evita este problema a costa de necesitar la(s) dirección(es) adicional(es) asignada(s).

0 votos

Sólo un pequeño punto: si ya estás usando NAT para traducir la IP, puedes hacer la redirección de puertos allí también. Por ejemplo, si estás ejecutando un servidor Apache con acceso a Internet y quieres usar XAMPP para pruebas, ejecuta Apache en un puerto no estándar y haz que el router NAT las peticiones del puerto externo 80 al puerto no estándar de la IP interna. Esto permitiría ejecutar XAMPP en el puerto 80.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: