2012-04-26 19 views
25

me gustaría reemplazar mi nodo-http-proxy module con nginx proxy_pass module. ¿Es posible con la nueva versión de nginx lanzada, como he leído, que es compatible con HTTP/1.1 de fábrica? Vi algunos hilos luchando con ese problema, que websockets no son compatibles con nginx.nginx 1.2.0 - socket.io - HTTP/1.1 - conexiones de proxy websocket

En mi caso estoy ejecutando varios proyectos de nodos en segundo plano y quiero enrutar mis conexiones de websocket del puerto 80 al 8000-8100, dependiendo del dominio. ¿Existe una forma nativa de hacer un proxy/proxy inverso de websocket sin usar el complemento tcp_module?

Intenté configurar un upstream en nginx.conf con proxy_passing, pero si trato de conectarme al puerto 80 sobre websocket, recibo un error de 502 Gateway.

¿Alguien con el mismo problema? ¿Alguien tiene un ejemplo de trabajo para nginx + spcket.io, proxying sobre el puerto 80?

+0

Usando ese complemento es la forma nativa. – Dayo

+0

Sí, esto es posible. Para solucionar problemas, sería útil si incluyes tu nginx.conf. – nil

Respuesta

34

No, esto aún no es posible; nginx 1.2 incorpora elementos de la rama de desarrollo 1.1.x que de hecho incluye HTTP/1.1 reverse proxying. Las conexiones de Websocket se establecen utilizando el encabezado HTTP/1.1 "Actualizar", pero el hecho de que nginx ahora admita este tipo de encabezados no significa que admita websockets (los websockets son un protocolo diferente, no HTTP). (yo probamos este mismo usando la rama 1.1.x (que me pareció ser lo suficientemente estable como para mi propósito) y no funciona sin la tcp_module)

websockets probablemente se admite en 1.3.x (http://trac.nginx.org/nginx/roadmap) .

Sus alternativas son:

  • seguir usando el nodo-http-proxy
  • uso nginx sin módulo TCP; socket.io no utilizará websockets pero otra cosa (por ejemplo, el sondeo de largo)
  • nginx con el módulo TCP: en este caso, creo que es necesario un puerto adicional para este módulo (nunca intentado esto mismo)
  • poner algo más en frontal como proxy inverso: uso HAProxy (que admite websockets) frente a nginx y nodo. Nginx ahora simplemente actúa como un servidor de archivos estático, no como un proxy. El barniz es otra opción, si desea almacenamiento en caché adicional.
+0

Thx para la aclaración Matthias. Para mí, era natural que nginx sea compatible con proxies de websocket si viene con HTTP1/1 a bordo. Sé que no es un protocolo HTTP, pero aún así tengo que hacer algunos deberes :) – ayk

+0

Al momento de escribir esto, Nginx 1.3 ha sido lanzado y es compatible con websockets. Es una configuración bastante simple que he [bloggeado sobre] (http://metacogni.tv/blog/2013/02/19/websockets-with-nginx-plus-ssl-also/) Espero que ayude. – Octaflop

0

En relación con NginX con el módulo TCP, hay algunos problemas que he encontrado. Pero la más complicada es tratar de ejecutar sus websockets con nginx en el puerto 80 en la instancia de EC2.

I describe la configuración de toda here

Cuestiones relacionadas