2011-04-09 21 views
15

Mi trabajo ejecuta un par de aplicaciones web internas diferentes en un servidor ubuntu (10.10) que ejecuta apache. Actualmente estoy desarrollando otra aplicación web, y estoy considerando seriamente el desarrollo de un servidor web node.js personalizado. Mi razonamiento para querer hacer esto es:Enviar subdominio a node.js

  1. velocidad/Escalabilidad
  2. Seguridad - Las páginas se sirven con un interruptor ... caso, en lugar de servir al usuario (potencialmente malicioso) lo que piden.
  3. Facilidad de configuración: mi intención es que este sea un proyecto de código abierto, y node.js es mucho más fácil de configurar para los usuarios, en lugar de tratar con apache/IIS/etc.

Mi pregunta es, en un servidor donde tengo Apache escuchando el puerto 80, ¿cómo puedo pasar ciertos subdominios a node.js. He visto un par de artículos sobre el uso de hosts virtuales de Apache para pasarlo, pero eso parece frustrar el propósito de usar node.js. Si tengo que pasar por Apache, entonces las tres razones para evitar apache/IIS se han anulado.

Sé que podría utilizar un puerto diferente (: 8080?), Pero desde el punto de vista del usuario final, es bastante confuso tener que poner puertos personalizados. ¿Alguna idea alternativa?

Gracias

Respuesta

5

¿Qué hay de hacer las cosas al revés: vincular el nodo al puerto 80, manejar el tráfico dirigido al subdominio y usarlo como un proxy inverso para apache para todo lo demás?

+0

Cualquier buenos módulos de Node.js/extensiones o tutoriales que sabes de esto? ¿O al menos una buena palabra clave para buscar? – jwegner

+0

[proxy HTTP de nodo] (https://github.com/nodejitsu/node-http-proxy) debería hacer el truco. – Adrien

4

Permítanme empezar desde cero:

Usted tiene un DNS. ¡Y un servidor dns mapea un DNS a una IP!

A continuación, tiene apache ejecuta en el equipo que escucha conexiones port 80 para http:// y en el puerto 443 para https://. http://example/ es en realidad una solicitud en http://example:80/.

No puede usar node.js para escuchar en la misma máquina en el mismo puerto que apache. Es por eso que usar el puerto 8080 es viable.

También puede asignar el subdominio a una dirección IP diferente. La única advertencia aquí es que debe tener una dirección IP pública.

4

No puede servir el puerto 80 desde Apache y node.js. Tener Apache como reverse proxy no sería muy eficiente y es por eso que nginx es popular en este escenario. Otra alternativa que el proxy inverso basado en nginx puede ser como Khez sugirió mapear su subdominio a diferentes direcciones IP, lo cual hará que node.js programe listen o use node.js como proxy inverso para Apache.

1

Puede configurar un host virtual en apache para su nuevo sitio y agregar una redirección permanente dentro del host local y el puerto utilizado por node.js.

Así es como lo hago en un servidor con varios otros hosts virtuales y mi nodo.js aplicación que se ejecuta en el puerto 3000:

NameVirtualHost *: (. *) 80

[Otras máquinas virtuales omitidas por brevedad]

...

ServerName mynewsite.com RedirectMatch http://localhost:3000 $ 1

+1

Sé que esto es un año de edad ... ¿Esto realmente funciona? Noté que esta respuesta obtuvo 0 upvotes, y todas las otras publicaciones dicen que lo que OP está pidiendo es imposible. –

2

si socket.io nodo está en ejecución, asegúrese de habilitar también algunas modificaciones de Apache:

  1. de proxy a2enmod
  2. proxy_balancer a2enmod
  3. proxy_express a2enmod
  4. proxy_http a2enmod

en el archivo /etc/apache2/sites-available/chat.example.com.conf


<VirtualHost *:80> 
    ServerName chat.example.com 

    <Location "/"> 
     ProxyPreserveHost On 
     ProxyPass http://localhost:3000/ 
     ProxyPassReverse http://localhost:3000/ 
    </Location> 
</VirtualHost> 

entonces por supuesto service apache2 reload

Cuestiones relacionadas