Comment rediriger un domaine et ses sous-domaines avec Nginx ?

Publié 8 septembre 2024

Problème : Redirection de domaines et sous-domaines avec Nginx

La redirection d'un domaine et de ses sous-domaines peut être complexe, notamment lors de l'utilisation de Nginx comme serveur web. Ce processus implique la mise en place de configurations pour rediriger tout le trafic du domaine d'origine et de ses sous-domaines vers la destination souhaitée.

Solution : Configuration de Nginx pour la redirection de domaine

Mise en place du bloc serveur Nginx

Pour rediriger un domaine et ses sous-domaines avec Nginx, vous devez créer un bloc serveur dans votre fichier de configuration Nginx. Ce bloc définira les règles de gestion des requêtes vers votre domaine.

Ouvrez votre fichier de configuration Nginx et ajoutez un nouveau bloc serveur :

server {
    # La configuration sera ajoutée ici
}

Définissez la directive server_name pour spécifier quel domaine et quels sous-domaines ce bloc doit gérer. Nginx permet de faire correspondre à la fois le domaine principal et tous les sous-domaines en utilisant un préfixe point :

server {
    server_name .mondomaine.exemple;
    # La suite de la configuration suivra
}

Ce paramètre server_name correspondra à "mondomaine.exemple" et à tout sous-domaine de "mondomaine.exemple".

Implémentation de la règle de redirection

Vous pouvez maintenant ajouter la règle de redirection. Nginx offre plusieurs façons d'implémenter des redirections, mais une méthode courante consiste à utiliser la directive rewrite.

Ajoutez cette ligne dans votre bloc serveur :

server {
    server_name .mondomaine.exemple;
    rewrite ^ http://www.autredomaine.exemple$request_uri? permanent;
}

Cette règle rewrite fait ce qui suit :

  • Le symbole ^ correspond au début de l'URI.
  • http://www.autredomaine.exemple est le domaine cible pour la redirection.
  • $request_uri capture l'URI de la requête originale et l'ajoute au nouveau domaine.
  • Le ? à la fin supprime toutes les chaînes de requête de la requête originale.
  • Le drapeau permanent crée une redirection 301 (permanente).

Cette configuration redirigera toutes les requêtes vers "mondomaine.exemple" ou l'un de ses sous-domaines vers "www.autredomaine.exemple", en conservant le chemin d'origine et en supprimant toutes les chaînes de requête.

En configurant Nginx de cette manière, vous créez un système de redirection qui gère à la fois votre domaine principal et tous ses sous-domaines.

Conseil: Test de votre configuration Nginx

Après avoir apporté des modifications à votre configuration Nginx, il est important de la tester avant de recharger le serveur. Vous pouvez utiliser la commande suivante pour vérifier les erreurs de syntaxe :

nginx -t

Si le test est réussi, vous pouvez alors recharger Nginx pour appliquer les modifications :

nginx -s reload

Méthodes alternatives pour la redirection Nginx

Utilisation de la directive return

Pour les versions Nginx 0.9.1 et supérieures, vous pouvez utiliser la directive return pour créer une règle de redirection plus simple. Cette méthode est claire et efficace.

Pour l'implémenter, modifiez votre bloc serveur comme suit :

server {
    server_name .mondomaine.exemple;
    return 301 http://www.autredomaine.exemple$request_uri;
}

Cette configuration fait la même chose que la méthode rewrite, mais avec une syntaxe plus courte. Le code de statut 301 indique une redirection permanente, et $request_uri conserve le chemin d'origine dans la nouvelle URL.

Conseil: Utilisez HTTPS pour des redirections sécurisées

Lors de la mise en place de redirections, il est recommandé d'utiliser HTTPS au lieu de HTTP pour l'URL cible. Cela améliore la sécurité et aide à maintenir le chiffrement SSL/TLS. Voici un exemple :

server {
    server_name .mondomaine.exemple;
    return 301 https://www.autredomaine.exemple$request_uri;
}

Gestion des sous-domaines avec caractère générique

Pour gérer tous les sous-domaines, y compris ceux à venir, vous pouvez utiliser des motifs génériques dans votre directive server_name. Cette méthode permet d'ajouter de nouveaux sous-domaines sans modifier la configuration.

Voici comment la configurer :

server {
    server_name mondomaine.exemple *.mondomaine.exemple;
    return 301 http://www.autredomaine.exemple$request_uri;
}

Cette configuration capture à la fois le domaine principal et tous les sous-domaines, les redirigeant tous vers le domaine cible. Le caractère générique (*) correspond à n'importe quel préfixe de sous-domaine, offrant ainsi une flexibilité dans votre configuration de redirection.