Nginx + Socket.io + Proxy

Nginx + Socket.io + Proxy

Depois de ler vários artigos, ainda não consigo fazer minha comunicação socket.io funcionar por meio de um proxy nginx.

Abaixo está minha nginxconfiguração:

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';
}

Veja como meu node.jsservidor expresso está conectado:

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

Tudo parece funcionar bem na minha máquina de desenvolvimento local, ou seja. Estou vendo minha mensagem de log onConnection e toda a comunicação também funciona bem.

No entanto, na produção, meu navegador obtém todas as respostas válidas, mas não vejo nenhum log onConnection e a comunicação pelo soquete não está funcionando.

Solicitações de guia de rede do Chrome (clique para abrir a imagem em tamanho real)

Solicitações de guias de rede do Chrome

Responder1

Pode ser que a porta 3000 esteja bloqueada por um firewall no seu servidor de produção. Você pode verificar se está aberto executando o seguinte comando em sua máquina de desenvolvimento local

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

Isto tentará abrir uma conexão com a porta 3000 no servidor de produção. Se você obtiver um tempo limite ou negar, a porta não estará aberta.

informação relacionada