Como redirecionar URLs no Nginx

NGINX é um servidor web de alto desempenho e um servidor proxy reverso conhecido por sua capacidade de lidar com altas cargas de tráfego e fornecer conteúdo estático com eficiência. Um de seus recursos poderosos é a capacidade de redirecionar URLs, um recurso crucial para gerenciar o tráfego da web, melhorar o SEO e garantir uma experiência tranquila do usuário. O redirecionamento de URL no NGINX pode ser usado para diversos fins, como redirecionar HTTP para HTTPS, criar aliases de URL ou gerenciar migrações de sites.

O guia a seguir demonstrará como redirecionar URLs no NGINX usando o terminal de linha de comando em sistemas Linux ou semelhantes a Unix. Ao configurar os recursos de redirecionamento robustos e flexíveis do NGINX, você pode gerenciar e controlar com eficiência o tráfego da Web para atender aos seus requisitos específicos.

URLs de redirecionamento de retorno no NGINX

O NGINX fornece duas diretivas principais para configurar o redirecionamento de URL: return e rewrite. Estas diretivas são cruciais para direcionar o tráfego da web de uma URL para outra.

Redirecionamentos 301 no NGINX

O redirecionamento 301 é essencial para o redirecionamento permanente. É comumente usado quando um site ou página da web foi movido permanentemente para um novo URL. Para configurar um redirecionamento 301 no NGINX, você usa o return diretiva dentro do seu bloco de servidor, especificando um código de status 301. Isso garante que tanto os usuários quanto os mecanismos de pesquisa sejam direcionados para o novo URL.

Exemplo de redirecionamento 301

Considere que você precisa redirecionar o tráfego de oldsite.com para newsite.com. A configuração do NGINX ficaria assim:

server {
    listen 80;
    server_name oldsite.com;
    location / {
        return 301 $scheme://www.newsite.com$request_uri;
    }
}

Esta configuração redireciona com eficiência todas as solicitações recebidas de oldsite.com para www.newsite.com, mantendo o URI da solicitação original. Este método simples, mas poderoso, garante que os usuários e mecanismos de pesquisa encontrem a localização do seu novo site.

Redirecionamentos 302 no NGINX

Em contraste com o redirecionamento permanente, um redirecionamento 302 é usado para cenários de redirecionamento temporário. Por exemplo, você pode redirecionar usuários temporariamente durante a manutenção do site ou quando uma página é movida temporariamente.

Exemplo de redirecionamento 302

Para ilustrar, digamos que você queira redirecionar o tráfego de temp.com para another-site.com temporariamente. A configuração do NGINX seria:

server {
    listen 80;
    server_name temp.com;
    location / {
        return 302 $scheme://www.another-site.com$request_uri;
    }
}

Nesta configuração, todo o tráfego para temp.com é temporariamente redirecionado para www.another-site.com. O uso de um código de status 302 indica que esse redirecionamento é temporário, o que é importante para manter a integridade do SEO durante mudanças de curto prazo.

Reescrever URLs de redirecionamento de diretiva no NGINX

O rewrite A diretiva no NGINX é uma ferramenta poderosa para lidar com cenários complexos de redirecionamento de URL. Ao contrário do direto return diretiva, rewrite aproveita expressões regulares e uma gama mais ampla de variáveis. Essa flexibilidade permite um controle preciso sobre como os URLs são redirecionados, especialmente em cenários onde o redirecionamento simples é insuficiente.

Redirecionamento baseado na extensão do arquivo

Redirecionando tipos de arquivos específicos

Um requisito comum é redirecionar tipos de arquivos específicos. Por exemplo, redirecionando todos .jpg solicitações de imagem para um novo diretório:

server {
    listen 80;
    server_name www.example.com;
    location ~* \.jpg$ {
        rewrite ^/images/(.*)\.jpg$ /new-images/$1.jpg permanent;
    }
}

Nesta configuração, qualquer solicitação a um .jpg arquivo no /images/ diretório é redirecionado para /new-images/. A expressão regular \.(jpg)$ garante que apenas URLs que terminem com .jpg são afetados.

Redirecionamento dinâmico baseado em URI

Redirecionamento com manipulação de URI

Outro cenário comum envolve o redirecionamento dinâmico de URLs com base em seus componentes URI. Considere redirecionar usuários com base em categorias de produtos:

server {
    listen 80;
    server_name www.example.com;
    location ~* ^/category/(.*)$ {
        rewrite ^/category/(.*)$ /new-category/$1 permanent;
    }
}

Esta configuração captura qualquer URL em /category/ e o redireciona para um URL correspondente em /new-category/, mantendo a última parte do URI.

Tratamento de estruturas de URL herdadas

Redirecionando URLs antigos para um novo padrão

Os sites costumam mudar sua estrutura de URL com o tempo. O rewrite diretiva pode lidar facilmente com essas transições:

server {
    listen 80;
    server_name www.example.com;
    location ~* ^/old-structure/(.*)$ {
        rewrite ^/old-structure/(.*)/info$ /new-structure/$1/details permanent;
    }
}

Este exemplo mostra como redirecionar URLs de um padrão antigo (/old-structure/[identifier]/info) para um novo padrão (/new-structure/[identifier]/details).

Redirecionamento com base geográfica

Redirecionando usuários por localização geográfica

O NGINX também pode lidar com redirecionamentos com base na localização geográfica, utilizando o $geoip_country_code variável:

server {
    listen 80;
    server_name www.example.com;
    if ($geoip_country_code = "US") {
        rewrite ^/(.*)$ /us/$1 permanent;
    }
}

Nesta configuração, os visitantes dos Estados Unidos são redirecionados para uma seção do site específica dos EUA. Esta abordagem requer que o módulo GeoIP esteja habilitado no NGINX.

URLs de redirecionamento de balanceamento de carga no NGINX

O NGINX se destaca no gerenciamento eficiente do tráfego de rede por meio de seus recursos de balanceamento de carga e redirecionamento. O balanceamento de carga no NGINX envolve a distribuição do tráfego de entrada em vários servidores. Esta estratégia evita que qualquer servidor fique sobrecarregado, melhorando assim o desempenho geral e a confiabilidade do sistema.

Configurando NGINX para balanceamento de carga

Configuração de balanceamento de carga

Balanceamento de carga básico

Aqui está um exemplo de como configurar o NGINX para balanceamento de carga:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }
    
    server {
        listen 80;
        
        location / {
            proxy_pass http://backend;
        }
    }
}

Nesta configuração, o NGINX atua como um proxy reverso e distribui uniformemente as solicitações recebidas para um dos três servidores backend especificados: backend1.example.com, backend2.example.com e backend3.example.com. Essa configuração é crucial para sites de alto tráfego, pois garante o tratamento eficiente de solicitações, mantendo assim tempos de resposta rápidos e minimizando o tempo de inatividade do servidor.

Balanceamento de carga avançado com verificações de integridade

Para maior confiabilidade, você pode configurar o NGINX para realizar verificações de integridade em servidores back-end e enviar tráfego apenas para servidores íntegros:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
        
        # Enable health checks
        health_check;
    }
    
    server {
        listen 80;
        
        location / {
            proxy_pass http://backend;
        }
    }
}

Com esta configuração, o NGINX verifica periodicamente a integridade dos servidores back-end e exclui quaisquer servidores que estejam inativos do pool de balanceamento de carga. Isso garante que o tráfego seja direcionado apenas para servidores capazes de lidar com solicitações, melhorando a confiabilidade geral.

Melhores práticas para balanceamento de carga

Implementando persistência de sessão (sessões fixas)

Para aplicativos que exigem persistência de sessão, você pode usar sessões fixas para garantir que um usuário seja roteado de forma consistente para o mesmo servidor back-end:

http {
    upstream backend {
        ip_hash;
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }
    
    server {
        listen 80;
        
        location / {
            proxy_pass http://backend;
        }
    }
}

Nesta configuração, o ip_hash A diretiva garante que as solicitações do mesmo endereço IP do cliente sejam sempre roteadas para o mesmo servidor backend, mantendo a consistência da sessão.

Configurando a terminação SSL

Para comunicações seguras, é uma prática recomendada encerrar o SSL no balanceador de carga:

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }
    
    server {
        listen 443 ssl;
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;
        
        location / {
            proxy_pass http://backend;
        }
    }
}

Nesta configuração, o NGINX lida com a terminação SSL, descriptografando as solicitações SSL recebidas e encaminhando-as para os servidores back-end como solicitações HTTP regulares. Isso descarrega o processamento SSL dos servidores backend, melhorando seu desempenho.

Conclusão

Neste guia, exploramos os aspectos práticos do uso do NGINX para redirecionamento de URL, balanceamento de carga e muito mais. Abordamos uma variedade de técnicas, desde a configuração de redirecionamentos 301 e 302 básicos até a implementação de regras de reescrita complexas e configurações eficientes de balanceamento de carga. O poder do NGINX reside na sua flexibilidade e desempenho, tornando-o uma ferramenta inestimável para gerenciar qualquer site, seja ele de pequena ou grande escala. À medida que você aplica esses conceitos, continue experimentando e otimizando. NGINX é uma ferramenta robusta em seu arsenal de administração web, então use-o para manter seu site funcionando de maneira suave e eficiente.

Joshua James
Me siga
Últimos posts por Joshua James (exibir todos)

Deixe um comentário