node apache node.js

apache reverse proxy node js



Apache y Node.js en el mismo servidor (9)

Ejecutar Node y Apache en un servidor es trivial ya que no entran en conflicto. NodeJS es solo una forma de ejecutar el lado del servidor JavaScript. El verdadero dilema viene de acceder tanto a Node como a Apache desde afuera. Como lo veo tienes dos opciones:

  1. Configure Apache para enviar todas las solicitudes coincidentes a NodeJS, que hará la carga del archivo y cualquier otra cosa en el nodo.

  2. Tenga Apache y Node en diferentes combinaciones de IP: puerto (si su servidor tiene dos IP, entonces una puede estar vinculada a su escucha del nodo, la otra a Apache).

También estoy empezando a sospechar que esto podría no ser lo que realmente estás buscando. Si su objetivo final es que escriba la lógica de su aplicación en Nodejs y alguna parte de "manejo de archivos" que descargue a un contratista, entonces es realmente una opción de idioma, no un servidor web.

Quiero usar Node porque es rápido, usa el mismo lenguaje que estoy usando en el lado del cliente y no tiene bloqueo por definición. Pero el tipo que contraté para escribir el programa para el manejo de archivos (guardar, editar, renombrar, descargar, cargar archivos, etc.), quiere usar Apache. Por lo tanto, debo:

  1. Convencerlo de usar Nodo (está cediendo poco terreno)

  2. Descubra cómo cargar, descargar, renombrar, guardar, etc. archivos en el nodo o

  3. Debo instalar apache y nodo en el mismo servidor.

¿Cuál es la situación más favorable y cómo implemento eso?


Esta pregunta pertenece más a Server Fault pero FWIW diría que ejecutar Apache delante de Node.js no es un buen enfoque en la mayoría de los casos.

El ProxyPass de Apache es increíble para muchas cosas (como exponer servicios basados ​​en Tomcat como parte de un sitio) y si su aplicación Node.js solo está haciendo un pequeño papel específico o es una herramienta interna que probablemente solo tenga un número limitado de usuarios entonces podría ser más fácil simplemente usarlo para que pueda funcionar y seguir adelante, pero eso no suena como el caso aquí.

Si desea aprovechar el rendimiento y la escala que obtendrá al usar Node.js, y especialmente si desea usar algo que implique mantener una conexión persistente como sockets web, es mejor que ejecute Apache y su Nodo. js en otros puertos (p. ej., Apache en localhost: 8080, Node.js en localhost: 3000) y luego ejecutando algo como nginx, Varnish o proxy HA en la parte frontal y enrutando el tráfico de esa manera.

Con algo como barniz o nginx puede enrutar el tráfico según la ruta y / o el host. Ambos usan mucho menos recursos del sistema y es mucho más escalable que usar Apache para hacer lo mismo.


Estaba buscando la misma información. Finalmente encontré la respuesta del enlace en la respuesta anterior por @Straseus

http://arguments.callee.info/2010/04/20/running-apache-and-node-js-together/

Aquí está la solución final para ejecutar el sitio web de apache en el puerto 80, node js service en el puerto 8080 y usar .htaccess RewriteRule

En el DocumentRoot del sitio web de apache, agregue lo siguiente:

Options +FollowSymLinks -MultiViews <IfModule mod_rewrite.c> RewriteEngine on # Simple URL redirect: RewriteRule ^test.html$ http://arguments.callee.info:8000/test/ [P] # More complicated (the user sees only "benchmark.html" in their address bar) RewriteRule ^benchmark.html$ http://arguments.callee.info:8000/node?action=benchmark [P] # Redirect a whole subdirectory: RewriteRule ^node/(.*) http://arguments.callee.info:8000/$1 [P]

Para la redirección a nivel de directorio, el enlace anterior sugirió (. +) La regla, que requiere uno o más caracteres después del ''nodo /''. Tuve que convertirlo a (. *) Que es cero o más para que mis cosas funcionen.

Muchas gracias por el enlace @Straseus.


Puede instalar ambos en el mismo servidor, pero deben configurarse para usar puertos diferentes. Ambos no pueden usar el puerto 80, al menos no tan fácilmente.

Tenga en cuenta que Apache es un servidor y nodeJS es un lenguaje.

¿Has intentado buscar en Google el problema antes de preguntar aquí?

http://arguments.callee.info/2010/04/20/running-apache-and-node-js-together/

¿Qué necesito para ejecutar un script node.js en mi servidor?

http://www.readwriteweb.com/hack/2010/12/how-to-run-apache-and-nodejs.php

http://eastmond.org/blog/?p=45


Supongo que está creando una aplicación web porque se refiere a Apache y Node. Respuesta rápida - ¿Es posible? SI. Se recomienda - NO. Node incluye su propio servidor web y la mayoría de los sitios web se ejecutan en el puerto 80. También asumo que actualmente no hay un complemento de Apache que sea compatible con Nodejs y no estoy seguro de que crear un host virtual sea la mejor manera de implementarlo. Estas son las preguntas que deben ser respondidas por los desarrolladores que mantienen a Nodejs como la buena gente de Joyent.

En lugar de puertos, sería mejor evaluar la pila tecnológica de Node, que es completamente diferente de la mayoría de las demás y por eso me encanta, pero también implica algunos compromisos de los que deberías estar enterado de antemano.

Su ejemplo es similar a un CMS o una aplicación web para compartir y hay cientos de aplicaciones disponibles que se ejecutarán bien en Apache. Incluso si no le gusta ninguna solución de readymade, puede escribir una aplicación web en PHP / Java / Python o combinarla con un par de aplicaciones listas para usar y todas están diseñadas y soportadas para ejecutarse detrás de una sola instancia de Apache.

Es hora de hacer una pausa y pensar en lo que acabo de decir.

Ahora está listo para decidir qué pila de tecnología va a utilizar. Si su sitio web nunca utilizará ninguna de las miles de aplicaciones listas para usar que requieren Apache, entonces vaya a Nodo, de lo contrario, primero debe eliminar las suposiciones que he indicado anteriormente.

Al final, su elección de techstack es mucho más importante que cualquier componente individual.

Estoy completamente de acuerdo con @Straseus en que es relativamente trivial utilizar la API del sistema de archivos node.js para manejar las subidas y descargas, pero a largo plazo piense más en lo que quiere de su sitio web y luego elija su TechStack.

Aprender el marco de Node es más fácil que aprender otros marcos, pero no es una panacea. Con un poco más de esfuerzo (que puede ser un esfuerzo valioso en sí mismo), puede aprender cualquier otro marco también. Todos aprendemos unos de otros y usted será más productivo si trabaja como un equipo pequeño que si trabaja solo y sus habilidades técnicas de back-end también se desarrollarán más rápido. Por lo tanto, no descuente las habilidades de otros miembros de su equipo de manera tan económica.

Esta publicación tiene aproximadamente un año de antigüedad y es probable que ya lo hayas decidido, pero espero que mi perorata ayude a la siguiente persona que esté pasando por una decisión similar.

Gracias por leer.


puede utilizar un enfoque diferente, como escribir un servidor proxy inverso con nodejs para proxy tanto para apache como para todas las demás aplicaciones de nodejs.

primero debe hacer que apache se ejecute en un puerto diferente al puerto 80. ej: puerto 8080

luego puede escribir un script de proxy inverso con nodejs como:

var proxy = require(''redbird'')({port: 80, xfwd: false); proxy.register("mydomain.me/blog", "http://mydomain.me:8080/blog"); proxy.register("mydomain.me", "http://mydomain.me:3000");

El siguiente artículo describe todo el proceso de hacer esto.

http://wathmal.me/blog/run-apache-with-node-js-reverse-proxy/


Gran pregunta

Hay muchos sitios web y aplicaciones web gratuitas implementadas en PHP que se ejecutan en Apache, mucha gente lo usa para que pueda combinar algo bastante fácil y, además, es una forma sencilla de servir contenido estático. Node es una herramienta rápida, potente, elegante y atractiva con la potencia bruta de V8 y una pila plana sin dependencias integradas.

También quiero la facilidad / flexibilidad de Apache y, sin embargo, el gruñido y la elegancia de Node.JS, ¿por qué no puedo tener ambas cosas ?

Afortunadamente, con la directiva ProxyPass en el httpd.conf Apache no es demasiado difícil canalizar todas las solicitudes de una URL particular a su aplicación Node.JS.

ProxyPass /node http://localhost:8000

Además, asegúrese de que las siguientes líneas NO estén comentadas para que obtenga el proxy y submódulo correctos para redireccionar las solicitudes http:

LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so

¡Entonces ejecuta tu aplicación Node en el puerto 8000!

var http = require(''http''); http.createServer(function (req, res) { res.writeHead(200, {''Content-Type'': ''text/plain''}); res.end(''Hello Apache!/n''); }).listen(8000, ''127.0.0.1'');

Luego, puede acceder a toda la lógica de Node.JS utilizando la ruta /node/ en su url, el resto del sitio web se puede dejar a Apache para alojar sus páginas PHP existentes:

¡Ahora lo único que queda es convencer a su compañía de hosting que le permita correr con esta configuración!



Instrucciones para ejecutar el node server largo del node server apache2(v2.4.xx) server :

Para canalizar todas las solicitudes de una URL particular a su aplicación Node.JS, cree el archivo CUSTOM.conf dentro del directorio /etc/apache2/conf-available , y agregue la siguiente línea al archivo creado:

ProxyPass /node http://localhost:8000/

Cambie 8000 al número de puerto preferido para el node server .
Habilitar configuraciones personalizadas con el siguiente comando:

$> sudo a2enconf CUSTOM

CUSTOM es su nombre de archivo recién creado sin extensión, luego habilite proxy_http con el comando:

$> sudo a2enmod proxy_http

debería habilitar los módulos proxy y proxy_http . Puede verificar si el módulo está habilitado o no con:

$> sudo a2query -m MODULE_NAME

Después de habilitar la configuración y los módulos, deberá reiniciar el servidor apache:

$> sudo service apache2 restart

Ahora puedes ejecutar el servidor de nodo. Todas las solicitudes a la URL/node serán manejadas por el servidor de nodo.


ProxyPass /node http://localhost:8000/

  • esto me funcionó cuando hice la entrada anterior en httpd-vhosts.conf en lugar de httpd.conf
  • Tengo XAMPP instalado en mi entorno y buscaba alcanzar todo el tráfico en apache en el puerto 80 con la aplicación NodeJS en el puerto 8080, es decir, http://localhost/[name_of_the_node_application]