Skip to content

Comprendre les blocs location de Nginx et leur impact sur la sécurité

Brandon Visca
Published date:

Table des matières

Open Table des matières

Qu’est-ce qu’un bloc location dans Nginx ?

Un bloc location permet de définir un comportement spécifique pour une requête HTTP en fonction de son URI. Il est souvent utilisé pour :

Exemple de base :

location /images/ {
    root /var/www/html;
}

location = /login { return 301 https://secure.monsite.com/login; }

2. location /chemin/

location /admin/ {
    auth_basic "Espace restreint";
}

location ^~ /static/ { root /var/www/assets; }

4. location ~ pattern

location ~ \.php$ {
    include fastcgi_params;
    ...
}

location ~* .(jpg|jpeg|png|gif|ico)$ { expires 7d; access_log off; }


Priorité des blocs location

Voici l’ordre d’évaluation des blocs location :

  1. location = /uri (exact)
  2. location ^~ /prefix
  3. location ~ /regex ou ~*
  4. location /prefix (générique)

Nginx applique le premier bloc qui correspond dans l’ordre ci-dessus.

Cela signifie que si plusieurs location peuvent correspondre à une requête, le bloc exact ou prioritaire sera appliqué même si une regex plus spécifique pourrait convenir.


Exemples d’utilisation avancée

Mutualiser plusieurs utilisateurs avec une regex

Imaginons un site éducatif avec un sous-dossier par utilisateur : /tamere, /tonpere, /tasoeur, etc.

Plutôt que de créer un bloc pour chacun, on utilise :

location ~ ^/([a-z0-9-]+)(/.*)?$ {
    root /home/app/htdocs;
    try_files $uri $uri/ /$1/index.php?$args;
}

location ~ .php$ { fastcgi_pass 127.0.0.1:9000; include fastcgi_params; }

Et pour éviter que des .php soient exécutés dans un répertoire public (ex. /uploads/) :

location ~* ^/uploads/.*\.php$ {
    deny all;
}

location ~ .php$ { … } location /admin/ { return 403; } ← Ignoré si /admin/index.php

✅ Solution : utiliser ^~ pour donner la priorité :

location ^~ /admin/ { return 403; }

location /images/ { alias /data/photos/; # Accède à /images/photo.jpg → /data/photos/photo.jpg }

root, lui, ajoute le chemin après l’URI.


Bonnes pratiques

location ~ /\.(ht|git|env|svn|project|idea) {
    deny all;
}

location /admin/ { add_header X-Frame-Options “DENY”; add_header Content-Security-Policy “default-src ‘none’;”; }


En résumé


Ressources complémentaires

Previous
Aller plus loin : Permissions-Policy et protection anti-bots sur Nginx
Next
Limiter les risques sur Nginx : fichiers sensibles, uploads, méthodes HTTP