Como Redirecionar um Domínio e Seus Subdomínios Usando Nginx?

Publicado 8 de setembro de 2024

Problema: Redirecionando Domínios e Subdomínios com Nginx

Redirecionar um domínio e seus subdomínios pode ser desafiador, especialmente ao usar o Nginx como servidor web. Esse processo envolve configurar o sistema para enviar todo o tráfego do domínio original e seus subdomínios para o destino desejado.

Solução: Configurando o Nginx para Redirecionamento de Domínio

Configurando o Bloco de Servidor do Nginx

Para redirecionar um domínio e seus subdomínios usando o Nginx, você precisa criar um bloco de servidor no arquivo de configuração do Nginx. Esse bloco definirá as regras para lidar com as requisições para o seu domínio.

Abra o arquivo de configuração do Nginx e adicione um novo bloco de servidor:

server {
    # As configurações serão adicionadas aqui
}

Defina a diretiva server_name para especificar qual domínio e subdomínios este bloco deve gerenciar. O Nginx permite que você corresponda tanto o domínio principal quanto todos os subdomínios usando um prefixo de ponto:

server {
    server_name .meudominio.exemplo;
    # Mais configurações serão adicionadas a seguir
}

Esta configuração de server_name corresponderá a "meudominio.exemplo" e qualquer subdomínio de "meudominio.exemplo".

Implementando a Regra de Redirecionamento

Agora você pode adicionar a regra de redirecionamento. O Nginx oferece maneiras de implementar redirecionamentos, mas um método comum é usar a diretiva rewrite.

Adicione esta linha dentro do seu bloco de servidor:

server {
    server_name .meudominio.exemplo;
    rewrite ^ http://www.outrodominio.exemplo$request_uri? permanent;
}

Esta regra de rewrite faz o seguinte:

  • O símbolo ^ corresponde ao início do URI.
  • http://www.outrodominio.exemplo é o domínio de destino para o redirecionamento.
  • $request_uri captura o URI da requisição original e o adiciona ao novo domínio.
  • O ? no final remove quaisquer strings de consulta da requisição original.
  • A flag permanent cria um redirecionamento 301 (permanente).

Esta configuração redirecionará todas as requisições para "meudominio.exemplo" ou qualquer um de seus subdomínios para "www.outrodominio.exemplo", mantendo o caminho original e removendo quaisquer strings de consulta.

Ao configurar o Nginx desta forma, você cria um sistema de redirecionamento que lida tanto com seu domínio principal quanto com todos os seus subdomínios.

Dica: Testando Sua Configuração do Nginx

Após fazer alterações na configuração do Nginx, é importante testá-la antes de recarregar o servidor. Você pode usar o seguinte comando para verificar erros de sintaxe:

nginx -t

Se o teste for bem-sucedido, você pode então recarregar o Nginx para aplicar as mudanças:

nginx -s reload

Métodos Alternativos para Redirecionamento no Nginx

Usando a Diretiva Return

Para versões do Nginx 0.9.1 e superiores, você pode usar a diretiva return para criar uma regra de redirecionamento mais simples. Este método é claro e eficiente.

Para implementar isso, modifique seu bloco de servidor da seguinte forma:

server {
    server_name .meudominio.exemplo;
    return 301 http://www.outrodominio.exemplo$request_uri;
}

Esta configuração faz o mesmo que o método rewrite, mas com uma sintaxe mais curta. O código de status 301 indica um redirecionamento permanente, e $request_uri mantém o caminho original na nova URL.

Dica: Use HTTPS para Redirecionamentos Seguros

Ao configurar redirecionamentos, é uma boa prática usar HTTPS em vez de HTTP para a URL de destino. Isso melhora a segurança e ajuda a manter a criptografia SSL/TLS. Aqui está um exemplo:

server {
    server_name .meudominio.exemplo;
    return 301 https://www.outrodominio.exemplo$request_uri;
}

Tratamento de Subdomínios com Curinga

Para lidar com todos os subdomínios, incluindo futuros, você pode usar padrões curinga na sua diretiva server_name. Este método permite novos subdomínios sem alterar a configuração.

Aqui está como configurar:

server {
    server_name meudominio.exemplo *.meudominio.exemplo;
    return 301 http://www.outrodominio.exemplo$request_uri;
}

Esta configuração captura tanto o domínio principal quanto qualquer subdomínio, redirecionando-os todos para o domínio de destino. O curinga (*) corresponde a qualquer prefixo de subdomínio, permitindo flexibilidade na sua configuração de redirecionamento.