Saltar a contenido

server-redirect: Redirigir el nombre del servidor dentro de la misma solicitud

Instalación

Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:

  • RedHat Enterprise Linux 7, 8, 9 y 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 y 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

Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:

load_module modules/ngx_http_server_redirect_module.so;

Este documento describe nginx-module-server-redirect v0.1.2 lanzado el 06 de enero de 2026.


Descripción

El ngx_http_server_redirect_module es un módulo personalizado de nginx diseñado para facilitar la redirección dinámica del servidor basada en reglas configurables. Permite a los usuarios redirigir solicitudes entrantes a diferentes servidores de manera condicional.

Sinopsis

Redirección Básica

Redirigir todas las solicitudes a 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;

        # Puedes obtener el host original de esta variable.
        add_header x-original-host $server_redirect_original_host;

        location / {
            proxy_pass http://upstream.com;
        }
    }
}

Redirección Condicional

Redirigir solicitudes basadas en la presencia de un encabezado específico.

http {
    server {
        listen 80;
        server_name example.com;

        # Redirigir si la solicitud tiene el encabezado 'X-Redirect' y el valor no es 0 o está vacío.
        server_redirect newserver.com if=$http_x_redirect;

        # Puedes usar ngx_http_var_module para generar variables de juicio basadas en condiciones.
        # 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 tiene efecto después del módulo real_ip,
        # Por lo tanto, las directivas del módulo real_ip tendrán efecto en el servidor antes de la redirección del servidor.
        # real_ip_header x-client-ip;

        location / {
            proxy_pass http://newserver.com;
        }
    }

    server {
        listen 80;
        server_name newserver.com;

        # Puedes obtener el host original de esta variable.
        add_header x-original-host $server_redirect_original_host;

        location / {
            proxy_pass http://upstream.com;
        }
    }
}

Redirección Programada

Redirigir la solicitud actual a otro servidor desde la primera ruta de la solicitud. Si la solicitud es http://example.com/newserver.com/test?arg=1, se redirigirá a http:///newserver.com/test?arg=1. Este proceso es interno y no ocurrirá una redirección 302.

http {
    server {
        listen 80;
        server_name example.com;

        # Habilitar redirección programada.
        schedule_redirect on;

        # Las solicitudes no llegarán aquí a menos que la primera ruta en la ruta de la solicitud no exista o el host en la primera ruta sea inválido.
        return 400 "ruta de solicitud inválida";
    }

    server {
        listen 80;
        server_name newserver.com;

        # Puedes obtener el host original de esta variable.
        add_header x-original-host $server_redirect_original_host;

        location / {
            proxy_pass http://upstream.com;
        }
    }
}

Configuración

Directiva: server_redirect

Sintaxis: server_redirect target_host [if=condition]

Predeterminado: -

Contexto: server

Redirige la solicitud actual a otro servidor. El servidor de destino debe tener el mismo puerto de escucha que el servidor actual.

El host de destino debe ser un nombre de host específico, igual que el host en el encabezado de la solicitud. Incluso si el servidor de destino al que deseas redirigir es un nombre de dominio comodín o una expresión regular.

Si no se puede encontrar el servidor de destino, se redirigirá al servidor predeterminado.

El parámetro if habilita la redirección condicional. Una solicitud no será redirigida si la condición evalúa a "0" o una cadena vacía. Además, también puedes usar la forma de if!= para hacer juicios negativos.

Aquí hay un ejemplo:

server_redirect newserver.com if=$http_server_redirect;

Este ejemplo redirige solicitudes a newserver.com si el encabezado Server-Redirect tiene valor y el valor no es 0.

Directiva: schedule_redirect

Sintaxis: schedule_redirect on | off

Predeterminado: schedule_redirect off

Contexto: server

Redirige la solicitud actual a otro servidor desde la primera ruta de la solicitud.

Si está habilitado, al acceder a http://a.com/b.com/, la solicitud se redirigirá a http://b.com/. Si no se puede encontrar el servidor de destino, se redirigirá al servidor predeterminado.

Cuando existe la directiva server_redirect y cumple con las condiciones de redirección, server_redirect se ejecutará primero.

Si la ruta de la solicitud no tiene la primera ruta (como la página de inicio), no se realizará ninguna redirección.

Después de la redirección, incluso $request_uri se limpiará de la primera ruta. Solo puedes encontrar la ruta de solicitud original en la variable de línea de solicitud $request.

Variable: $server_redirect_original_host

Mantiene el valor original de la variable $host antes de que ocurra la redirección.

GitHub

Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-server-redirect.