Configuración de NGINX para trabajar con Socket.IO.

Así que he estado tratando de hacer que esto funcione 2 días y estoy atascado. Esta es la primera vez que configuro un servidor para Rails que utiliza NodeJS + Socket IO. Soy un novato con NGINX y Unicorn. Básicamente, la parte NodeJS + SocketIO de mi aplicación enviará mensajes a los usuarios que están conectados a mi aplicación. Este es mi nginx.conf

server{ listen 80 default; root /home/deployer/saigon/public; try_files $uri/index.html $uri @unicorn; location /sockets { proxy_pass http://localhost:3210; } location @unicorn { proxy_pass http://localhost:3000; } } 

Y en mi production.rb, he configurado la URL a la que el usuario tendrá que enviar un mensaje a / recibir un mensaje desde

 SOCKET_IO_URL ='http://localhost:8080/sockets 

¿Por qué 8080? Uso Vagrant para reenviar 8080 -> 80

Intenté acceder a http: // localhost: 8080 / sockets y pude obtener el mensaje de bienvenida del socket. Miré mi registro de servidor NodeJS y estaba recibiendo mensajes bien. Sin embargo, cuando se trata de la transmisión … simplemente no lo hace. ¿Alguna vez alguien ha conseguido que este tipo de aplicación funcione con la configuración que estoy tratando de hacer? ¿Debo simplemente ir con Apache + Unicornio?

Respuesta actualizada

Finalmente he descubierto una manera de hacer que esto funcione. No es del todo obvio, pero al alojar socket.io en una subcarpeta, NO se usa la subcarpeta en la instrucción de conexión. Esto es lo que estaba haciendo antes y el cliente nunca recibió una respuesta.

No funciona

   

http: // localhost: 8080 / test / Esta es la parte que está tirando cosas. Eso crea un espacio de nombres para el socket local que el servidor no respeta. Entonces, el cliente envía el mensaje en el espacio de nombres ‘/ test /’ pero las respuestas del servidor van a un espacio de nombre vacío ” para que el cliente nunca reciba los mensajes. La solución es simplemente eliminar el ‘/ test /’ y asegurarse de que está utilizando la variable de recursos en el cliente y el servidor.

¡Trabajando!

   

Espero que esto te ayude a poner las cosas a funcionar en tu final.

Respuesta original

No es un problema con su configuración, es un problema de socket.io que no quiere trabajar en la subcarpeta. Apostaría dispuesto a ser que si dejas caer las / sockets tu ejemplo funcionará bien. Me encontré con el mismo problema al usar http-node-proxy tratando de alojar conexiones socket.io en subcarpetas. Hace un tiempo se creó un error, pero se cerró y nunca se resolvió.

https://github.com/LearnBoost/socket.io-client/issues/185

https://github.com/LearnBoost/socket.io/issues/320

Sigo buscando una solución también, pero tengo la sensación de que tendré que arremangarme y meterme en el código.