Error 421 Misdirected Request
O erro 421 Misdirected Request acontece quando uma requisição é recebida através de uma conexão TLS (HTTPS) destinada a um determinado domínio, mas o cliente solicita um domínio diferente sem abrir uma nova conexão ou renegociar o SNI (Server Name Indication). Isso faz com que o servidor detecte uma inconsistência entre o domínio solicitado e o contexto da conexão segura já estabelecida, resultando na resposta de erro 421.
De forma mais prática, esse erro costuma ocorrer em ambientes onde há um proxy reverso, como o Nginx, repassando requisições para um servidor de aplicação, como o Apache. O fluxo funciona assim: o navegador do usuário inicia a conexão segura com o Nginx, e o Nginx, por sua vez, encaminha essa requisição para o Apache.
O problema se agravou após a atualização do Apache para a versão 2.4.58-1ubuntu8.6, onde foram implementadas políticas de segurança mais rígidas. Essa atualização incluiu correções de vulnerabilidades (CVEs), especialmente focadas em situações envolvendo o uso combinado de Apache + Nginx. Agora, o Apache exige que o nome exato do host (hostname) seja informado através do SNI durante o handshake TLS/SSL para validar corretamente a solicitação recebida.
Por padrão, o Nginx não encaminha o SNI ao estabelecer conexões proxy via HTTPS com o Apache. Assim, quando o Apache recebe a conexão sem o SNI correto, ele não reconhece o domínio que está sendo requisitado, rejeita a requisição e retorna o erro 421.
Método de correção 1: Via GUI do Plesk (recomendada para usuários do Plesk)
Este é o método mais seguro e fácil se o seu servidor for gerenciado pelo Plesk, pois evita totalmente a linha de comando.
- Faça login no painel do Plesk.
- Vá para Ferramentas e configurações no menu à esquerda.
- No grupo "Configurações gerais", clique em Configurações do Apache e do Nginx.
- Role para baixo para encontrar a caixa de texto rotulada Diretivas adicionais do Nginx.
Cole as duas linhas a seguir nessa caixa:
proxy_ssl_server_name on; proxy_ssl_name $host;
- Clique em OK ou Aplicar. O Plesk salvará automaticamente a configuração e reiniciará o Nginx. Seus sites agora devem estar online novamente.
Método 2: CLI no servidor
Este método é para usuários experientes que se sentem confortáveis na linha de comando e desejam a solução mais rápida possível.
- Conecte-se ao seu servidor via SSH.
Execute o comando único a seguir. Ele criará o arquivo necessário e reiniciará o Nginx em uma única etapa.
echo -e "proxy_ssl_server_name on;\nproxy_ssl_name \$host;" > /etc/nginx/conf.d/fixssl.conf && service nginx restart
- Após a conclusão do comando, seus sites devem estar on-line novamente.
Método 3: Criação manual de arquivos
Este método alcança o mesmo resultado que o Método 2, mas permite que você crie e edite manualmente o arquivo, o que alguns usuários preferem.
- Conecte-se ao seu servidor via SSH.
Abra um novo arquivo de configuração usando um editor de texto como:
vim
sudo vim /etc/nginx/conf.d/fixssl.conf
Cole as duas linhas a seguir no arquivo vazio:
proxy_ssl_server_name on; proxy_ssl_name $host;
- Salve o arquivo e saia do editor pressionando Ctrl+X, Y e Enter.
Por fim, teste a configuração do Nginx para garantir que não haja erros e reinicie o serviço:
sudo nginx -t && sudo systemctl restart nginx
- Se o teste for bem-sucedido, o Nginx será reiniciado e seus sites estarão online novamente.