Exemples de directive location Nginx
La directive location de Nginx est un outil puissant pour contrôler la manière dont différents types de requêtes sont traités. En définissant des règles dans les blocs location, vous pouvez appliquer des configurations spécifiques, rediriger le trafic vers différentes parties de votre application ou même refuser complètement certaines requêtes. Une utilisation correcte de cette directive permet une gestion efficace des requêtes, essentielle pour améliorer les performances, la sécurité et les fonctionnalités des applications web.
Syntaxe de base de la directive location Copier le lien
La directive location est définie dans le fichier de configuration nginx.conf :
location [modifier] uri { ... }
-
modifier : paramètre optionnel définissant le type de correspondance (exacte, préfixe, expression régulière, etc.)
-
uri : l’URI à faire correspondre
À l’intérieur des accolades, vous pouvez définir diverses directives comme proxy_pass, root ou index.
Exemple de correspondance exacte Copier le lien
Une correspondance exacte se produit lorsque la chaîne fournie correspond exactement à l’URI demandée.
location = /exact-match {
root /var/www/html;
index index.html;
}
Seules les requêtes vers /exact-match seront traitées par ce bloc.
Vous pouvez également utiliser une condition if (notez que Nginx ne possède pas de if-else classique) :
location = /exact-match {
root /var/www/html;
index index.html;
if ($http_user_agent ~* "Chrome") {
add_header X-Browser "Chrome";
}
}
Si l’agent utilisateur est Chrome, la réponse inclura l’en-tête supplémentaire X-Browser.
Exemple de correspondance par préfixe Copier le lien
C’est le type le plus courant : il correspond à toute URI commençant par la chaîne spécifiée.
location /prefix {
root /var/www/html;
index index.html;
if ($request_method = POST) {
return 405;
}
}
Ce bloc gère toutes les requêtes commençant par /prefix. Si la méthode est POST, Nginx renvoie 405 Method Not Allowed.
Exemple avec expressions régulières Copier le lien
Pour des scénarios plus complexes, vous pouvez utiliser des expressions régulières.
Caractères génériques courants :
-
. correspond à un caractère
-
.* correspond à n’importe quelle séquence
-
^ début de chaîne
-
$ fin de chaîne
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
if ($request_uri ~* "/admin") {
return 403;
}
if ($request_uri !~* "/admin") {
add_header X-Admin "Not Admin";
}
}
Explications :
-
~* indique une regex insensible à la casse
-
\.php$ correspond aux fichiers PHP
-
si l’URI contient /admin, retour 403
-
sinon, ajout de l’en-tête X-Admin
Correspondance insensible à la casse Copier le lien
location ~* \.jpg$ {
root /var/www/images;
if ($http_referer !~* "^https?://(www\.)?example\.com") {
return 403;
}
}
Correspond à .jpg, .JPG, etc., et sert les images uniquement si le referer provient de example.com.
Priorité et ordre Copier le lien
Nginx applique les règles suivantes :
-
Correspondance exacte (=)
-
Expressions régulières (~, ~*) dans l’ordre de définition
-
Préfixes (/), le plus long étant prioritaire
Exemple :
location = /exact { }
location ~* \.jpg$ { }
location / { }
Blocs location imbriqués Copier le lien
location /nested {
location /nested/subnested {
root /var/www/html;
}
root /var/www/html;
}
Les requêtes vers /nested/subnested utilisent le bloc interne.
Exemple réel de serveur web Copier le lien
server {
listen 80;
server_name localhost;
location / {
root /var/www/html;
index index.html;
}
location = /about {
root /var/www/html;
index about.html;
}
location /api {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~ \.php$ {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
location ~* \.(jpg|jpeg|png|gif|ico)$ {
root /var/www/images;
}
location /admin {
root /var/www/admin;
index index.html;
location /admin/stats {
proxy_pass http://localhost:8080/stats;
}
}
}
Recharger Nginx Copier le lien
sudo systemctl reload nginx
Tests et débogage Copier le lien
Vérifier la configuration :
sudo nginx -t
Tester les routes :
curl -I http://localhost/about
curl -X POST http://localhost/prefix/form
curl -H "User-Agent: Chrome" http://localhost/exact-match
Consulter les logs :
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
Restriction d’accès aux routes sensibles Copier le lien
location /admin {
allow 192.168.1.100;
deny all;
}
Seule cette IP aura accès.
root vs alias Copier le lien
|
Directive |
Comportement |
|
root |
ajoute l’URI |
|
alias |
remplace le préfixe |
Exemple :
location /files/ {
alias /data/downloads/;
}
Remarque : toujours terminer alias par /.
Conclusion Copier le lien
Comprendre la directive location est essentiel pour maîtriser le traitement des requêtes dans Nginx. Les différents types de correspondance (exacte, préfixe, regex) et leurs priorités influencent directement les performances et le comportement du site. En combinant ces mécanismes avec des blocs imbriqués, vous obtenez une configuration propre, efficace et sécurisée.