/ / nginx 1.2.0 - socket.io - HTTP / 1.1 - Conexiones de proxy websocket - proxy, nginx, websocket, socket.io, proxy inverso

nginx 1.2.0 - socket.io - HTTP / 1.1 - Conexiones de proxy websocket - proxy, nginx, websocket, socket.io, proxy inverso

Me gustaría reemplazar mi módulo nodo-http-proxycon el módulo proxy_pass nginx. ¿Es posible con la nueva versión nginx lanzada, como he leído, que soporta HTTP / 1.1 fuera de la caja? Vi algunos subprocesos relacionados con ese problema, que los websockets no son compatibles con nginx.

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

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

¿Alguien frente al mismo problema? ¿Alguien tiene un ejemplo de trabajo para nginx + spcket.io, con proxy a través del puerto 80?

Respuestas

35 para la respuesta № 1

No, esto todavía no es posible; nginx 1.2 incorpora elementos de la rama de desarrollo 1.1.x que de hecho incluye el proxy inverso HTTP / 1.1. Las conexiones de Websocket se establecen utilizando el encabezado "Actualizar" de HTTP / 1.1, pero el hecho de que nginx ahora admita este tipo de encabezados no significa que sea compatible con websockets (los websockets son un protocolo diferente, no HTTP). (Lo intenté yo mismo usando la rama 1.1.x (que encontré suficientemente estable para mi propósito) y no funciona sin el módulo tcp_module)

Websockets probablemente será compatible con 1.3.x ( http://trac.nginx.org/nginx/roadmap )

Sus alternativas son:

  • seguir usando el nodo-http-proxy
  • usar nginx sin modulo tcp; socket.io no usará websockets pero algo más (por ejemplo, sondeo largo)
  • nginx con el módulo tcp: en este caso, creo que necesita un puerto adicional para este módulo (nunca lo intenté yo mismo)
  • poner algo más delante como un proxy inverso: Uso HAProxy (que admite websockets) delante de nginx y node. Nginx ahora simplemente actúa como un servidor de archivos estático, no como un proxy. El barniz es otra opción, si desea un almacenamiento en caché adicional.

0 para la respuesta № 2

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

Describí toda la configuración aquí