Saltar al contenido

NodeJS HTTP: escuche en otro puerto que no sea 80

Si encuentras algún detalle que no entiendes nos puedes dejar un comentario y trataremos de ayudarte lo mas rápido que podamos.

Solución:

En cuanto a su otra pregunta, que se marcó como duplicada de esta, tiene información adicional allí que probablemente lo ayudará a aclarar lo que necesita. En concreto, mencionas lo siguiente:

Quiero alojar múltiples servidores http con NodeJS, que todos obtengan y enviar http peticiones. Al mismo tiempo, quiero ejecutar Apache, que ocupa el puerto 80. Si deshabilito Apache y dejo que NodeJS se ejecute en el puerto 80, funcionará, pero no puedo ejecutarlos al mismo tiempo.

Este script se ejecutará y recibirá solicitudes localmente en el puerto 8081, pero parece que no puedo enviarle una solicitud AJAX a través de Internet, incluso después de reenviar el puerto con mi enrutador:

Creo que @ankit-agarwal probablemente tenga razón en que necesita una configuración de proxy inverso para reenviar el tráfico a sus diferentes backends. Suponiendo que tiene una dirección IP externa, debería poder acceder a cada uno de sus backends utilizando los puertos en los que están escuchando. Por ejemplo, si la dirección IP pública expuesta de su máquina es 100.120.110.43:

+---------+------+-------------------------------------+
| Backend | Port |             Web Address             |
+=========+======+=====================================+
| Apache  |   80 | 100.120.110.43 or 100.120.110.43:80 |
| Node1   | 8080 | 100.120.110.43:8080                 |
| Node2   | 8081 | 100.120.110.43:8081                 |
+---------+------+-------------------------------------+

Si desea acceder a cada uno de los backends sin especificar el puerto, debe tener alguna forma de decirle a su red interna qué backend atender en función de la solicitud. Una forma de hacer esto es usar el enrutamiento basado en rutas, donde configura su proxy inverso para enrutar el tráfico a los diferentes backends según la ruta en la URL. No publicó su configuración de Apache, pero puede usar su servidor Apache actual para manejar esto usando las directivas ProxyPass y ProxyPassReverse similares a las siguientes:

ProxyPass "/node1"  "http://100.120.110.43:8080/"
ProxyPassReverse "/node1"  "http://100.120.110.43:8080/"

ProxyPass "/node2"  "http://100.120.110.43:8081/"
ProxyPassReverse "/node2"  "http://100.120.110.43:8081/"

Lo bueno de usar un proxy inverso es que no tiene que exponer los backends de su nodo al público. Supongamos que no lo ha hecho y que solo se puede acceder a ellos desde la red interna en el puerto 0.0.0.0:.

Listen 80

    DocumentRoot /www/apache
    ServerName www.apachefrontend.com
    ProxyRequests off
    ProxyPass /node1  http://0.0.0.0:8080/
    ProxyPassReverse /node1  http://0.0.0.0:8080/
    ProxyPass /node2  http://0.0.0.0:8081/
    ProxyPassReverse /node2  http://0.0.0.0:8081/

También puede señalar diferentes hosts/ips a los que solo usted tiene acceso.

Finalmente, también puede usar VirtualHost y ServerName si tiene diferentes registros DNS para apuntar a los diferentes backends.

Listen 80

    DocumentRoot /www/apache
    ServerName www.apachefrontend.com


    ServerName www.nodebackend1.com
    ProxyRequests off
    
        Order deny,allow
        Allow from all
    
    
        ProxyPass /  http://0.0.0.0:8080/
        ProxyPassReverse /  http://0.0.0.0:8080/
    


    ServerName www.nodebackend2.com
    ProxyRequests off
    
        Order deny,allow
        Allow from all
    
    
        ProxyPass /  http://0.0.0.0:8081/
        ProxyPassReverse /  http://0.0.0.0:8081/
    

Para que cualquiera de los anteriores funcione, debe tener mod_proxy y mod_proxy_http habilitado en apache.

Estos probablemente no sean los ejemplos más sólidos y no los he probado, pero deberían demostrar la idea. Puedes aprender más aqui.

Reseñas y valoraciones

Tienes la opción de añadir valor a nuestra información colaborando tu veteranía en las explicaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *