Ao configurar o Nginx como um proxy reverso para um aplicativo Node.js que utiliza Express para servir conteúdo estático e Socket.io para gerenciar conexões WebSocket, é comum encontrar erros de SSL, especialmente ao tentar estabelecer conexões com o servidor Socket.io a partir do cliente. Este artigo abordará como resolver o erro SSL ao configurar o Nginx para funcionar corretamente com o Socket.io.
Entendendo o Erro SSL
O erro específico que você está enfrentando é ERR_SSL_PROTOCOL_ERROR
, que indica que houve um problema com o protocolo SSL/TLS durante a tentativa de estabelecer uma conexão segura. Isso pode ocorrer quando há uma inconsistência na configuração SSL entre o cliente e o servidor.
Solução: Configuração do Nginx
Para resolver esse problema, é necessário configurar o Nginx para permitir corretamente as conexões com o servidor Socket.io. Isso pode ser feito adicionando algumas configurações específicas ao arquivo de configuração do Nginx.
Aqui está um exemplo de configuração do Nginx para permitir conexões com o servidor Socket.io:
location /socket.io/ {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
Essa configuração instrui o Nginx a encaminhar solicitações para /socket.io/
para o servidor Node.js em localhost:3000
, enquanto mantém a compatibilidade com a atualização de protocolos e cabeçalhos de conexão necessários para o Socket.io funcionar corretamente.
Configuração do Servidor Node.js
Além da configuração do Nginx, é importante garantir que o servidor Node.js esteja configurado corretamente para lidar com conexões WebSocket através do Socket.io.
Aqui está um exemplo de configuração básica do servidor Node.js utilizando Express e Socket.io:
var express = require('express');
var http = require('http');
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);
app.use(express.static(__dirname + "/public"));
server.listen(3000, () => {
console.log('server listening on port 3000');
});
Certifique-se de que o servidor esteja ouvindo na porta correta (nesse exemplo, a porta 3000) e que o Socket.io esteja configurado para funcionar com o servidor HTTP adequado.
Conexão do Cliente
Ao conectar-se ao servidor Socket.io a partir do cliente, certifique-se de usar o URL correto, incluindo o protocolo (https://
) e a porta correta, se aplicável.
socket = io('https://mywebsite.com:3000');
Conclusão
Ao configurar o Nginx como um proxy reverso para um aplicativo Node.js que utiliza Express e Socket.io, é importante garantir que todas as configurações estejam corretamente alinhadas para evitar erros de SSL. Com as configurações adequadas tanto no Nginx quanto no servidor Node.js, você poderá resolver o erro SSL e permitir conexões WebSocket seguras e estáveis entre o cliente e o servidor.