Location Blocks

Context location

Il contesto location permette di associare a un URL una risorsa che il Virtual Host deve restituire.

Fa parte del contesto server.

Viene definito con:

location [uri to match] {
    # actions to take
}

Nella configurazione introdotta in Creazione di un Virtual Host, il risultato sarebbe il seguente:

# events è necessario per ritenere la configurazione valida
events {}

http {
  include mime.types; # Path relativa del file rispetto al file di configurazione

  server {
    listen 80;
    server_name appunti.truppaperot.it;

    root /sites/demo;

    location /greet {
        return 200 'Hi there! From NGINX /greet';
    }
  }
}

Direttiva return

La direttiva return specifica il codice di risposta e i dati di risposta di una location.

return [code] [data]

Tipi di Match

Si può definire, per ogni contesto location, come deve essere interpretata la risoluzione di un URL.

Prefix Match

Il prefix match convalida ogni URL che inizia con una stringa.

location /greet {
    # Risponderanno con questa regola anche
    # /greeting
    # /greetings
    # /greetings/john
}

Exatch Match

Al contrario del prefix match, la risoluzione di un URL avviene solo se corrisponde esattamente alla stringa specificata.

location = /greet {
    # Risponde solo /greet
}

Regex Match

ATTENZIONE

Questa opzione richiede la libreria e il modulo di NGINX pcre installati

Il questa configurazione, l'URL verrà risolto se corrisponde alla RegEx definita.

La RegEx è KEY SENTITIVE

location ~ /greet[0-9] {
    # Risponderanno
    # /greet0
    # /greet1
    # ...
    # /greet9
    # Ma non /greet o /gReet1
}

Per avere una RegEx KEY INSENSITIVE, è necessario aggiungere * dopo il simbolo ~

location ~* /greet[0-9] {
    # Risponderanno
    # /greet0
    # /greeT1
    # ...
    # /gReet9
    # Ma non /greet
}

Preferential Prefix Match

Si comporta allo stesso modo di un prefix match, ma con una precedenza superiore a un regex match

location ^~ /Greet2 {
    # Ha precedenza rispetto a
    # location ~ /Greet[0-9]
    # Rispondono anche
    # /Greet2ings
    # /Greet2/john
}

Priorità dei tipi di match

Si possono definire più regole per degli URL simili, che verranno risolti nel seguente ordine di precedenza:

  1. Exact Match
  2. Preferential Prefix Match
  3. RegEx Match (se esistono sia un Preferential Prefix e un RegEx Match che risolvono in egual modo lo stesso URL, il primo blocco scritto verrà risolto)
  4. Prefix Match