
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 nginx
configuraçã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.js
servidor 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)
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.