Nginx + Socket.io + Proxy

Nginx + Socket.io + Proxy

Después de leer varios artículos, todavía no puedo hacer que mi comunicación socket.io funcione a través de un proxy nginx.

A continuación se muestra mi nginxconfiguración:

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

location ~* \.io {
    proxy_pass http://localhost:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
}

Así es como node.jsestá conectado mi servidor Express:

const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);

Todo parece funcionar bien en mi máquina de desarrollo local, es decir. Veo mi mensaje de registro de conexión y toda la comunicación también funciona bien.

Sin embargo, en producción, mi navegador obtiene todas las respuestas válidas, pero no veo ningún registro de conexión y la comunicación a través del socket no funciona.

Solicitudes de pestañas de red de Chrome (haga clic para abrir la imagen en tamaño completo)

Solicitudes de pestaña de red de Chrome

Respuesta1

Podría ser que el puerto 3000 esté bloqueado por un firewall en su servidor de producción. Puede verificar si está abierto ejecutando el siguiente comando desde su máquina de desarrollo local

telnet <ip-address-of-your-production-server> 3000

Esto intentará abrir una conexión al puerto 3000 en el servidor de producción. Si obtiene un tiempo de espera o lo niega, el puerto no está abierto.

información relacionada