Como criar redirecionamentos temporários e permanentes com o Nginx

Introdução

O redirecionamento HTTP é uma maneira de apontar um domínio ou endereço para outro. Existem alguns tipos diferentes de redirecionamentos, cada um dos quais significa algo diferente para o navegador do cliente. Os dois tipos mais comuns são redirecionamentos temporários e redirecionamentos permanentes.

Redirecionamentos temporários (código de status de resposta 302 Encontrado) são úteis se um URL precisar ser temporariamente servido de um local diferente. Por exemplo, se você estiver realizando manutenção no site, poderá desejar usar um redirecionamento temporário do seu domínio para uma página de explicação para informar seus visitantes de que você estará de volta em breve.

Redirecionamentos permanentes (código de status de resposta 301 Movido Permanentemente), por outro lado, informam ao navegador que ele deve esquecer completamente o endereço antigo e não tentar acessá-lo mais. Estes são úteis quando seu conteúdo foi permanentemente movido para um novo local, como quando você muda de nomes de domínio.

Este guia abordará uma explicação mais detalhada de como implementar cada tipo de redirecionamento no Nginx e passará por alguns exemplos para casos de uso específicos.

Pré-requisitos

Para seguir este tutorial, você precisará:

  • A server with Nginx installed and set up to serve your website(s). You can find some examples and instructions on the tutorials for Ubuntu 22.04, Debian, or CentOS.

Solução Num Relance

No Nginx, você pode realizar a maioria dos redirecionamentos com a diretiva embutida rewrite. Esta diretiva está disponível por padrão em uma instalação fresca do Nginx e pode ser usada para criar redirecionamentos tanto temporários quanto permanentes. Em sua forma mais simples, ela requer pelo menos dois argumentos: o URL antigo e o novo URL.

Você pode implementar um redirecionamento temporário com as seguintes linhas na configuração do seu servidor:

Temporary redirect with rewrite
server {
    . . .
    server_name www.domain1.com;
    rewrite ^/$ http://www.domain2.com redirect;
    . . .
}

Este redirecionamento instrui o navegador a direcionar todas as solicitações para www.domain1.com para www.domain2.com. No entanto, esta solução funciona apenas para uma única página, não para o site inteiro. Para redirecionar mais do que uma única página, você pode usar a diretiva rewrite com expressões regulares para especificar diretórios inteiros em vez de apenas arquivos individuais.

redirect corresponde a padrões de expressões regulares entre parênteses. Em seguida, faz referência ao texto correspondido no destino do redirecionamento usando a expressão $1, onde 1 é o primeiro grupo de texto correspondido. Em exemplos mais complexos, grupos correspondidos subsequentes recebem números sequenciais.

Por exemplo, se você quiser redirecionar temporariamente todas as páginas dentro de www.domain1.com para www.domain2.com, você pode usar o seguinte:

Temporary redirect with rewrite
server {
    . . .
    server_name www.domain1.com;
    rewrite ^/(.*)$ http://www.domain2.com/$1 redirect;
    . . .
}

server {
    . . .
    server_name www.domain2.com;
    . . .
}

Por padrão, a diretiva rewrite estabelece um redirecionamento temporário. Se você deseja criar um redirecionamento permanente, pode fazê-lo substituindo redirect por permanent no final da diretiva, como este:

Permanent redirects
rewrite ^/$ http://www.domain2.com permanent;
rewrite ^/(.*)$ http://www.domain2.com/$1 permanent;

Vamos avançar para alguns exemplos específicos.

Exemplo 1 — Mudando para um Domínio Diferente

Se você estabeleceu uma presença na web e gostaria de mudar seu domínio para um novo endereço, é melhor não abandonar simplesmente seu domínio antigo. Favoritos do seu site e links para seu site localizados em outras páginas na internet irão quebrar se seu conteúdo desaparecer sem instruções para o navegador sobre como encontrar sua nova localização. Mudar de domínio sem redirecionamento fará com que seu site perca tráfego de visitantes anteriores e links mais antigos.

Neste exemplo, vamos configurar um redirecionamento do antigo domínio chamado dominio1.com para o novo chamado dominio2.com. Usaremos redirecionamentos permanentes aqui porque o domínio antigo será descontinuado, e todo o tráfego deve ir para o novo domínio a partir de agora.

Vamos supor que você tenha seu site configurado para ser servido a partir de um único domínio chamado dominio1.com já configurado no Nginx da seguinte maneira:

/etc/nginx/sites-available/domain1.com
server {
    . . .
    server_name domain1.com;
    . . .
}

Também vamos supor que você já esteja servindo a versão futura do seu site em dominio2.com:

/etc/nginx/sites-available/domain2.com
server {
    . . .
    server_name domain2.com;
    . . .
}

Vamos alterar o arquivo de configuração do bloco do servidor domain1.com para adicionar um redirecionamento permanente para domain2.com:

/etc/nginx/sites-available/domain1.com
server {
    . . .
    server_name domain1.com;
    rewrite ^/(.*)$ http://domain2.com/$1 permanent;
    . . .
}

Adicionamos o redirecionamento mencionado usando uma diretiva rewrite. A expressão regular ^/(.*)$ corresponde a tudo depois da barra / na URL. Por exemplo, http://domain1.com/index.html será redirecionado para http://domain2.com/index.html. Para alcançar o redirecionamento permanente, simplesmente adicionamos permanent após a diretiva rewrite.

Nota: Lembre-se de testar sua configuração usando nginx -t e depois reiniciar o Nginx após fazer suas alterações.

Exemplo 2 — Criando uma Experiência Persistente Apesar das Mudanças de Nome de Páginas Únicas

Às vezes, é necessário alterar os nomes de páginas individuais que já foram publicadas e receberam tráfego em seu site. Apenas alterar o nome causaria um erro 404 Not Found para visitantes tentando acessar a URL original, mas você pode evitar isso usando um redirecionamento. Isso garante que as pessoas que marcaram suas páginas antigas ou as encontraram através de links desatualizados nos mecanismos de busca ainda cheguem à página correta.

Vamos supor que o seu website tinha duas páginas separadas para produtos e serviços chamadas products.html e services.html respectivamente. Agora, você decidiu substituir essas duas páginas por uma única página de oferta chamada offers.html em vez disso. Vamos configurar um redirecionamento simples para products.html e services.html para offers.html.

Nós presumimos que o seu website está configurado da seguinte forma:

Original server block configuration
server {
    . . .
    server_name example.com www.example.com;
    . . .
}

Configurar os redirecionamentos é tão simples quanto usar duas diretivas de redirecionamento.

Redirects added to the original configuration
server {
    . . .
    server_name example.com www.example.com;
    
    rewrite ^/products.html$ /offer.html permanent;
    rewrite ^/services.html$ /offer.html permanent;
    . . .
}

A diretiva rewrite aceita o endereço original que deve ser redirecionado, assim como o endereço de destino de uma nova página. Como a mudança aqui não é temporária, usamos permanent na diretiva também. Você pode usar quantos redirecionamentos como este desejar para garantir que seus visitantes não vejam erros 404 Not Found desnecessários ao mover o conteúdo do site.

Conclusão

Agora você tem o conhecimento para redirecionar solicitações para novos locais. Certifique-se de usar o tipo de redirecionamento correto, pois o uso impróprio de redirecionamentos temporários pode prejudicar o seu ranking de pesquisa.

Há múltiplos outros usos de redirecionamentos HTTP, incluindo forçar conexões SSL seguras (ou seja, usando https em vez de http) e garantir que todos os visitantes acabem apenas no endereço prefixado com www. do website.

Usar redirecionamentos corretamente permitirá que você aproveite sua presença na web atual, ao mesmo tempo em que lhe dá a capacidade de modificar a estrutura do seu site conforme necessário. Se você deseja aprender mais sobre as maneiras de redirecionar seus visitantes, o Nginx tem uma ótima documentação sobre o assunto nas seções do módulo de reescrita da documentação oficial e no post do blog oficial sobre a criação de redirecionamentos.

Source:
https://www.digitalocean.com/community/tutorials/how-to-create-temporary-and-permanent-redirects-with-nginx