server-redirect: Redirecionar nome do servidor dentro da mesma solicitação
Instalação
Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:
- RedHat Enterprise Linux 7, 8, 9 e 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 e Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-server-redirect
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-server-redirect
Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:
load_module modules/ngx_http_server_redirect_module.so;
Este documento descreve o nginx-module-server-redirect v0.1.2 lançado em 06 de janeiro de 2026.
Descrição
O ngx_http_server_redirect_module é um módulo nginx personalizado projetado para facilitar o redirecionamento dinâmico de servidores com base em regras configuráveis. Ele permite que os usuários redirecionem solicitações recebidas para diferentes servidores de forma condicional.
Sinopse
Redirecionamento Básico
Redirecionar todas as solicitações para newserver.com incondicionalmente.
http {
server {
listen 80;
server_name example.com;
server_redirect newserver.com;
location / {
proxy_pass http://newserver.com;
}
}
server {
listen 80;
server_name newserver.com;
# Você pode obter o host original a partir desta variável.
add_header x-original-host $server_redirect_original_host;
location / {
proxy_pass http://upstream.com;
}
}
}
Redirecionamento Condicional
Redirecionar solicitações com base na presença de um cabeçalho específico.
http {
server {
listen 80;
server_name example.com;
# Redirecionar se a solicitação tiver o cabeçalho 'X-Redirect' e o valor não for 0 ou vazio.
server_redirect newserver.com if=$http_x_redirect;
# Você pode usar ngx_http_var_module para gerar variáveis de julgamento com base em condições.
# https://git.hanada.info/hanada/ngx_http_var_module
# var $is_ipv6 if_find $remote_addr :;
# server_redirect newserver.com if=$is_ipv6;
# Este módulo entra em vigor após o módulo real_ip,
# Portanto, as diretivas do módulo real_ip terão efeito no servidor antes do redirecionamento do servidor.
# real_ip_header x-client-ip;
location / {
proxy_pass http://newserver.com;
}
}
server {
listen 80;
server_name newserver.com;
# Você pode obter o host original a partir desta variável.
add_header x-original-host $server_redirect_original_host;
location / {
proxy_pass http://upstream.com;
}
}
}
Redirecionamento Programado
Redirecionar a solicitação atual para outro servidor a partir do primeiro caminho da solicitação.
Se a solicitação for http://example.com/newserver.com/test?arg=1, será redirecionada para http:///newserver.com/test?arg=1. Este processo é interno e nenhum redirecionamento 302 ocorrerá.
http {
server {
listen 80;
server_name example.com;
# Ativar redirecionamento programado.
schedule_redirect on;
# As solicitações não chegarão aqui, a menos que o primeiro caminho na solicitação não exista ou o host no primeiro caminho seja inválido.
return 400 "caminho da solicitação inválido";
}
server {
listen 80;
server_name newserver.com;
# Você pode obter o host original a partir desta variável.
add_header x-original-host $server_redirect_original_host;
location / {
proxy_pass http://upstream.com;
}
}
}
Configuração
Diretriz: server_redirect
Sintaxe: server_redirect target_host [if=condition]
Padrão: -
Contexto: server
Redireciona a solicitação atual para outro servidor. O servidor de destino deve ter a mesma porta de escuta que o servidor atual.
O host de destino deve ser um nome de host específico, assim como o host no cabeçalho da solicitação. Mesmo que o servidor de destino para o qual você deseja redirecionar seja um nome de domínio curinga ou uma expressão regular.
Se o servidor de destino não puder ser encontrado, será redirecionado para o servidor padrão.
O parâmetro if permite o redirecionamento condicional. Uma solicitação não será redirecionada se a condição for avaliada como “0” ou uma string vazia. Além disso, você também pode usar a forma if!= para fazer julgamentos negativos.
Aqui está um exemplo:
server_redirect newserver.com if=$http_server_redirect;
Este exemplo redireciona solicitações para newserver.com se o cabeçalho Server-Redirect tiver valor e o valor não for 0.
Diretriz: schedule_redirect
Sintaxe: schedule_redirect on | off
Padrão: schedule_redirect off
Contexto: server
Redireciona a solicitação atual para outro servidor a partir do primeiro caminho da solicitação.
Se ativado, ao acessar http://a.com/b.com/, a solicitação será redirecionada para http://b.com/. Se o servidor de destino não puder ser encontrado, será redirecionado para o servidor padrão.
Quando a diretiva server_redirect existe e atende às condições de redirecionamento, o server_redirect será executado primeiro.
Se o caminho da solicitação não tiver o primeiro caminho (como a página inicial), nenhum redirecionamento será feito.
Após o redirecionamento, até mesmo $request_uri será limpo do primeiro caminho. Você só pode encontrar o caminho original da solicitação na variável de linha de solicitação $request.
Variável: $server_redirect_original_host
Mantém o valor original da variável $host antes que o redirecionamento ocorra.
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-server-redirect.