Aller au contenu

server-redirect: Rediriger le nom du serveur dans la même requête

Installation

Vous pouvez installer ce module dans n'importe quelle distribution basée sur RHEL, y compris, mais sans s'y limiter :

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

Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :

load_module modules/ngx_http_server_redirect_module.so;

Ce document décrit nginx-module-server-redirect v0.1.2 publié le 6 janvier 2026.


Description

Le ngx_http_server_redirect_module est un module nginx personnalisé conçu pour faciliter la redirection dynamique des serveurs en fonction de règles configurables. Il permet aux utilisateurs de rediriger les requêtes entrantes vers différents serveurs de manière conditionnelle.

Synopsis

Redirection de base

Rediriger toutes les requêtes vers newserver.com sans condition.

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;

        # Vous pouvez obtenir l'hôte d'origine à partir de cette variable.
        add_header x-original-host $server_redirect_original_host;

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

Redirection conditionnelle

Rediriger les requêtes en fonction de la présence d'un en-tête spécifique.

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

        # Rediriger si la requête a l'en-tête 'X-Redirect' et que la valeur n'est pas 0 ou vide.
        server_redirect newserver.com if=$http_x_redirect;

        # Vous pouvez utiliser ngx_http_var_module pour générer des variables de jugement basées sur des conditions.
        # https://git.hanada.info/hanada/ngx_http_var_module
        # var $is_ipv6 if_find $remote_addr :;
        # server_redirect newserver.com if=$is_ipv6;

        # Ce module prend effet après le module real_ip,
        # Par conséquent, les directives du module real_ip prendront effet sur le serveur avant la redirection du serveur.
        # real_ip_header x-client-ip;

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

    server {
        listen 80;
        server_name newserver.com;

        # Vous pouvez obtenir l'hôte d'origine à partir de cette variable.
        add_header x-original-host $server_redirect_original_host;

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

Redirection programmée

Rediriger la requête actuelle vers un autre serveur à partir du premier chemin de requête. Si la requête est http://example.com/newserver.com/test?arg=1, elle sera redirigée vers http:///newserver.com/test?arg=1. Ce processus est interne et aucune redirection 302 ne se produira.

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

        # Activer la redirection programmée.
        schedule_redirect on;

        # Les requêtes n'arriveront pas ici à moins que le premier chemin dans le chemin de la requête n'existe pas ou que l'hôte dans le premier chemin soit invalide.
        return 400 "chemin de requête invalide";
    }

    server {
        listen 80;
        server_name newserver.com;

        # Vous pouvez obtenir l'hôte d'origine à partir de cette variable.
        add_header x-original-host $server_redirect_original_host;

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

Configuration

Directive : server_redirect

Syntaxe : server_redirect target_host [if=condition]

Par défaut : -

Contexte : server

Redirige la requête actuelle vers un autre serveur. Le serveur cible doit avoir le même port d'écoute que le serveur actuel.

L'hôte cible doit être un nom d'hôte spécifique, tout comme l'hôte dans l'en-tête de la requête. Même si le serveur cible vers lequel vous souhaitez rediriger est un nom de domaine générique ou une expression régulière.

Si le serveur cible ne peut pas être trouvé, il sera redirigé vers le serveur par défaut.

Le paramètre if permet la redirection conditionnelle. Une requête ne sera pas redirigée si la condition évalue à "0" ou à une chaîne vide. De plus, vous pouvez également utiliser la forme if!= pour effectuer des jugements négatifs.

Voici un exemple :

server_redirect newserver.com if=$http_server_redirect;

Cet exemple redirige les requêtes vers newserver.com si l'en-tête Server-Redirect a une valeur et que cette valeur n'est pas 0.

Directive : schedule_redirect

Syntaxe : schedule_redirect on | off

Par défaut : schedule_redirect off

Contexte : server

Redirige la requête actuelle vers un autre serveur à partir du premier chemin de requête.

Si activé, lors de l'accès à http://a.com/b.com/, la requête sera redirigée vers http://b.com/. Si le serveur cible ne peut pas être trouvé, il sera redirigé vers le serveur par défaut.

Lorsque la directive server_redirect existe et répond aux conditions de redirection, server_redirect sera exécuté en premier.

Si le chemin de la requête n'a pas le premier chemin (comme la page d'accueil), aucune redirection ne sera effectuée.

Après la redirection, même $request_uri sera vidé du premier chemin. Vous ne pouvez trouver le chemin de requête d'origine que dans la variable de ligne de requête $request.

Variable : $server_redirect_original_host

Conserve la valeur d'origine de la variable $host avant que la redirection ne se produise.

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-server-redirect.