Learning Center
Server web Nginx

Esempi della direttiva location in Nginx

6 feb 2026
Adnene Mabrouk
Adnene Mabrouk

La direttiva location di Nginx è uno strumento potente per controllare il modo in cui vengono gestite le diverse richieste. Definendo regole nei blocchi location, puoi applicare configurazioni specifiche, indirizzare il traffico verso parti diverse dell’applicazione oppure bloccare completamente alcune richieste. Un uso corretto di questa direttiva consente una gestione efficiente delle richieste, fondamentale per migliorare prestazioni, sicurezza e funzionalità delle applicazioni web.

Sintassi di base della direttiva location
Copia link

La direttiva location è definita nel file di configurazione nginx.conf:

location [modifier] uri { ... }

  • modifier: parametro opzionale che definisce il tipo di corrispondenza (esatta, prefisso, regex)

  • uri: l’URI da confrontare

All’interno delle parentesi graffe puoi inserire varie istruzioni come proxy_pass, root o index.

Esempio di corrispondenza esatta
Copia link

Una corrispondenza esatta avviene quando la stringa specificata coincide perfettamente con l’URI richiesto.

location = /exact-match {

    root /var/www/html;

    index index.html;

}

Solo le richieste verso /exact-match verranno elaborate da questo blocco.

Puoi anche usare una condizione if (nota che Nginx non supporta un vero if-else):

location = /exact-match {

    root /var/www/html;

    index index.html;

    if ($http_user_agent ~* "Chrome") {

        add_header X-Browser "Chrome";

    }

}

Se lo user agent è Chrome, la risposta includerà l’header X-Browser.

Esempio di corrispondenza per prefisso
Copia link

È il tipo più comune: corrisponde a qualsiasi URI che inizi con la stringa indicata.

location /prefix {

    root /var/www/html;

    index index.html;

    if ($request_method = POST) {

        return 405;

    }

}

Questo blocco gestisce tutte le richieste che iniziano con /prefix. Se il metodo è POST, Nginx restituisce 405 Method Not Allowed.

Esempio con espressioni regolari
Copia link

Per scenari più complessi puoi usare le regex.

Caratteri jolly comuni:

  • . qualsiasi carattere

  • .* qualsiasi sequenza

  • ^ inizio stringa

  • $ fine stringa

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";

    }

}

Spiegazione:

  • ~* indica regex case-insensitive

  • \.php$ intercetta i file PHP

  • se l’URI contiene /admin, ritorna 403

  • altrimenti aggiunge l’header X-Admin

Corrispondenza senza distinzione tra maiuscole/minuscole
Copia link

location ~* \.jpg$ {

    root /var/www/images;

    if ($http_referer !~* "^https?://(www\.)?example\.com") {

        return 403;

    }

}

Corrisponde a .jpg, .JPG, ecc., e serve le immagini solo se il referer proviene da example.com.

Priorità e ordine
Copia link

Nginx segue queste regole:

  1. Match esatto (=)

  2. Regex (~, ~*) nell’ordine di definizione

  3. Prefissi (/), dove vince il più lungo

Esempio:

location = /exact { }

location ~* \.jpg$ { }

location / { }

Blocchi location annidati
Copia link

location /nested {

    location /nested/subnested {

        root /var/www/html;

    }

    root /var/www/html;

}

Le richieste verso /nested/subnested usano il blocco interno.

Esempio reale di server web
Copia link

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;

}

}

}

Ricaricare Nginx
Copia link

sudo systemctl reload nginx

Test e debug
Copia link

Controlla la configurazione:

sudo nginx -t

Test delle route:

curl -I http://localhost/about

curl -X POST http://localhost/prefix/form

curl -H "User-Agent: Chrome" http://localhost/exact-match

Log:

tail -f /var/log/nginx/access.log

tail -f /var/log/nginx/error.log

Limitare l’accesso a percorsi sensibili
Copia link

location /admin {

    allow 192.168.1.100;

    deny all;

}

Solo quell’IP potrà accedere.

root vs alias
Copia link

Direttiva

Comportamento

root

aggiunge l’URI

alias

sostituisce il prefisso

Esempio:

location /files/ {

    alias /data/downloads/;

}

Nota: con alias, termina sempre il percorso con /.

Conclusione
Copia link

Comprendere a fondo la direttiva location è fondamentale per gestire correttamente le richieste in Nginx. I diversi tipi di match (esatto, prefisso, regex) e le loro priorità influiscono direttamente su prestazioni e comportamento del sito. Usando anche i blocchi annidati, puoi creare configurazioni pulite, efficienti e altamente controllate.