Comment faire une redirection avec Nginx ?

Aujourd’hui un des serveurs HTTP le plus utilisé est Nginx, qui a été conçu  pour répondre au problème C10K où le but est d’être capable de répondre à plus de 10 000 requêtes simultanées. Nginx est donc le server http le plus performant lors d’une montée en charge important avec un système de worker. Là ou apache crée un processus par connexion, Nginx lance une série de workers qui vont chacun être capable de gérer de multiples connexions d’une manière non bloquante. Rue de l’info vous explique ci-dessous en détails, la méthode pour effectuer une redirection Nginx.

Redirection Nginx simple : (d’une page à une autre)

server {
listen 80;
server_name www.domaine.com;
rewrite ^/page.html$ http://www.domaine.com/autre-page.html permanent;
}

Le mot clé « permanent » signifie que la redirection sera de type 301, alors que « redirect » signifie qu’elle sera de type 302 donc temporaire.

Redirection d’un groupe d’URL

rewrite ^/liste/article-.*.html$ http://www.domaine.com/blog/article-$1.html permanent;

Dans cette exemple j’utilise les expressions régulières, redirige un groupe d’URL avec une syntaxe commune.

Redirection d’une URL avec paramètres vers une URL sans paramètre

location ~ /demo.html {
if ($args ~ limit=50){
rewrite ^ http://www.domaine.com/articles.html? permanent;
}
}

Dans ce cas, j’ai une URL avec un paramètre limite égale à 50, ce paramètre ne set plus je voudrais donc m’en débarrasser.

Le point d’interrogation à la fin de l’URL rewrite permet de dire à Nginx de ne pas ajouter les paramètres derrière l’URL.

La variable « args » définit les paramètres. Location permet de définir le pattern d’URL concernés par le rewrite. Le ~ introduit une expression régulière (sensible à la casse).

Redirection d’une URL si un paramètre existe

location ~ /demo.html {
if ($arg_article != "") {
rewrite ^ http://www.domaine.com/articles.html? permanent;
}
}

Ici je redirige les URL finissants par /demo.html ayant au moins un paramètre, peu importe la valeur, vers une URL sans paramètre

location ~ /demo.html {
if ($arg_article != ""){
rewrite ^ http://www.domaine.com/article/$arg_article? permanent;
}
}

Ici je  fais la même chose en récupérant le paramètre article et en le plaçant comme Slug dans la nouvelle URL

Redirection vers le sous-domaine www

server {
listen 80;
server_name domaine.com;
rewrite ^/(.*) http://www.domaine.com/$1 permanent;
}

Ici je redirige toutes les URL de domaine.com vers www.domaine.com

Redirection ou code serveur spécifique en fonction du user-agent

location ~ (wp-admin|wp-login\.php) {
if ($http_user_agent ~* "(bingbot|googlebot)") {
return 403;
break;
}
}

Dans ce cas j’ai besoin de bloquer le Crawl de Google et Bing pour certaines pages. Pour cela on vérifie le user agent qui se présente. J’envoie donc un forbidden sur une page que Googlebot ou Bingbot. L’utilisation de « break » indique que le serveur ne doit appliquer les directives qu’à l’intérieur du bloc défini par « location ». A l’inverse avec « last », le serveur recherche une URL qui pourrait matcher avec le pattern dans tous les blocs « location ».

Redirection en fonction d’un code serveur

error_page 500 502 503 504 /50x.html;

Vérification et redémarrage

Une fois toutes vos modifications effectuées il ne faut pas oublier de recharger la configuration en redémarrant Nginx.

# Pour tester la configuration
sudo nginx -t
# Pour recharger la configuration
sudo service nginx restart

Si vous avez des questions sur la redirection Nginx, propositions ou astuces qui pourraient aider à faire grandir le partage d’informations, n’hésitez pas à nous contacter !

Partager

Écrivez un commentaire ...

Rue de l'info by RDI © 2018