2012-05-20 12 views
6

estoy explorando el uso del servidor proxy de node-http-proxy para que pueda tener nuestro servidor proxy en el puerto 80 reenviar solicitudes a nuestro servidor de aplicaciones en el puerto 8000. Sin embargo, estoy un poco confundido en cuanto a por qué esto es una buena idea, y qué exactamente esta configuración protegería contra la seguridad.¿Cuál es el punto de utilizar un servidor proxy tal como el nodo-http-proxy para una aplicación nodo con una sola aplicación en un puerto?

La documentación nota-http-proxy discute mucho acerca de su uso como una manera de reenviar solicitudes a una aplicación con múltiples puertos o direcciones IP. Obviamente, esto sería muy útil, particularmente con una estrategia básica equilibradora de carga round-robin. Sin embargo, solo tenemos una aplicación en un puerto, por lo que no es necesario que hagamos esto.

Si hay una razón importante por la seguridad debemos utilizar este servidor proxy, entonces me gustaría saber qué tipos de ataques que protege contra. Además, estamos usando socket.io, así que si hay algo que el proxy haga para ayudar al servidor websocket a ampliarse, también me gustaría entender eso. Estamos teniendo problemas para averiguar cómo ejecutar nuestra aplicación sin sudo (ya que todos los puertos por debajo de 1024 requieren acceso de root), por lo que si realmente no hay buenas razones para utilizar un servidor proxy en este punto, sólo vamos a desechar en . Si alguien sabe cómo ejecutar esta aplicación con el servidor proxy en el puerto 80 sin acceso a la raíz, sería muy útil también. ¡Gracias!

+0

solo curiosidad ¿por qué lo buscaste en primer lugar?Es común usar algo como nginx como un proxy para servir activos estáticos o pasar las otras solicitudes a la aplicación de nodo. –

+0

@JustinSoliz Porque, hasta donde yo sé, nginx no proxy websockets – user730569

+0

Fue un ejemplo, de nuevo preguntando por qué buscó node-http-proxy? ¿Qué intentas lograr con él? –

Respuesta

3

Las razones para correr un proxy inverso son:

  • Usted tiene puertos IP limitadas abierta y necesita ejecutar muchos servicios de nodo de cada uno de los cuales necesita su propio puerto
  • Su servicio de back-end no soporta HTTPS pero lo necesita (por ejemplo, Derby)
  • Para agregar alguna otra característica a la solicitud que no se puede hacer fácilmente con el back-end como agregar autenticación básica o alguna forma de registro/auditoría común
  • Para imponer una adición o cambiar a las respuestas salientes commo n la mayoría de los servicios de back-end
  • para proporcionar un servicio de equilibrio de carga

A menos que sus necesidades son muy simples, sería mejor usar un proxy dedicado como HAproxy desde el nodo-http-proxy es bastante simplista .

+0

En realidad, node-http-proxy puede manejar esto muy bien. Nodejitsu usa node-http-proxy en producción, y hace casi todas las cosas en su lista. Se utiliza para equilibrar la carga y certificados HTTPS, y redirecciona otros puertos al puerto 80. También puede [agregar middleware para modificar las solicitudes] (http://blog.nodejitsu.com/http-proxy-middlewares) en el nodo-http -apoderado. – CodeRarity

+0

Tal vez estaba siendo un poco duro con eso, pero la verdad es que está mal documentado y no recibí ningún soporte útil sobre el problema que golpeé inmediatamente al usarlo con HTTPS. No tengo motivos para quejarme: después de todo, está disponible de manera gratuita, es solo que, cuando se compara con una herramienta de proxy dedicada, no se acumula para el uso en producción. Tal vez eso podría cambiar si estuviese mejor documentado, sin duda sería bueno tener una cadena de herramientas con todos los nodos. –

+0

Encuentro que muchas aplicaciones de nodos no están bien documentadas ... En esos casos, la documentación es el código en sí (que no siempre es tan bueno como leer bien la documentación escrita). – trusktr

1

Bueno, si sólo se está ejecutando una instancia de servidor, a continuación, theres no realmente una razón. El nodo-http-proxy menciona el uso de un solo certificado SSL en múltiples aplicaciones, lo cual es muy posible. También puede equilibrar la carga en varios servidores de conexión HTTP y web (por ejemplo, ejecutar 10 servidores socket.io para datos en tiempo real pero solo 1 servidor HTTP para servir activos y API REST). Por supuesto, con una instancia estos no proporcionan ningún beneficio.

Si desea ejecutar los servidores de nodos sin sudo, tal vez usted podría intentar la creación de tablas de reenvío de puertos IP del puerto 80 a un puerto por encima de 1024. Ver Can I run Node.JS with low privileges?

+0

Puede usar el mismo certificado para tantos "servidores" de nodo como desee siempre que se ejecuten desde la misma dirección IP. Varias direcciones IP requieren varios certificados o utilizan direcciones comodín o la extensión "Nombre alternativo del servidor" que no es compatible con navegadores antiguos. No necesitas un proxy para esto. –

1

utilizamos principalmente el http-proxy para tener múltiples vuelta -enviar el servidor detrás de una sola IP, pero también lo usamos para reenviar https a http. Fortalece nuestra aplicación.

En lo que respecta a la seguridad, puede tener más confianza en la buena calidad de http-proxy que en su aplicación. La creación de proxy por nodejitsu está lista para producción y debería ser más difícil para los atacantes obtener privilegios (como leer los archivos de clave privada) en un proxy HTTP en lugar de su propia aplicación (por supuesto, esto depende de su habilidad de desarrollo de seguridad y su confianza en el proyecto de http-proxy de código abierto).

Cuestiones relacionadas