socket proxy nginx websocket socket.io reverse-proxy

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



nginx websocket timeout (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 here

Me gustaría reemplazar mi módulo node-http-proxy con el módulo nginx proxy_pass. ¿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.

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 flujo ascendente en nginx.conf con proxy_passing, pero si trato de conectarme al puerto 80 por websocket, aparece un error 502 Gateway.

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


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). (Intenté esto usando la rama 1.1.x (que encontré suficientemente estable para mi propósito) y no funciona sin el tcp_module)

Es probable que Websockets sea compatible con 1.3.x ( http://trac.nginx.org/nginx/roadmap ).

Sus alternativas son:

  • sigue usando node-http-proxy
  • use nginx sin el módulo tcp; socket.io no usará websockets sino otra cosa (por ejemplo, larga encuesta)
  • nginx con módulo tcp: en este caso creo que necesitas un puerto adicional para este módulo (nunca lo intenté)
  • pon algo más al frente como un 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.