set în Nginx

Redirecționări și rescrieri Toate versiunile Nginx

Creează sau schimbă o variabilă în configurația Nginx. Valoarea poate combina text și alte variabile.

Sintaxă
set $variabila valoare;

Ce face set

set atribuie o valoare unei variabile, la fiecare cerere, în faza de rescriere (aceeași fază ca rewrite, if și return). Valoarea poate conține text și alte variabile: set $cheie "$host$request_uri";.

Variabilele create cu set sunt vizibile în toată configurația (numele trebuie să fie unic), dar valoarea există doar pentru cererea curentă. Unele variabile predefinite pot fi și ele modificate, de exemplu $args sau $limit_rate.

Pentru valori care depind de altă variabilă după o listă de reguli, map este de preferat: se calculează doar când e folosită și nu are capcanele lui if.

Parametri

Parametru Descriere
Context server, location, if.
$variabila Numele variabilei, cu $.
valoare Text, variabile sau o combinație; între ghilimele dacă are spații.

Ce returnează

Nimic; variabila primește valoarea pentru cererea curentă.

Exemple

Exemplul 1: Ocolirea cache-ului pentru utilizatori autentificați

Folosire tipică a lui set împreună cu if: fiecare if doar setează o variabilă, ceea ce este sigur.

location / {
    set $fara_cache 0;

    if ($request_method = POST) {
        set $fara_cache 1;
    }
    if ($cookie_wordpress_logged_in) {
        set $fara_cache 1;
    }

    fastcgi_cache_bypass $fara_cache;
    fastcgi_no_cache $fara_cache;
    # ...
}

Exemplul 2: Backend într-o variabilă

Când proxy_pass conține o variabilă, Nginx rezolvă numele DNS la fiecare cerere, deci are nevoie de resolver.

location /api/ {
    set $backend "http://api-intern.exemplu.ro:8080";
    resolver 127.0.0.53 valid=60s;
    proxy_pass $backend;
}

Exemplul 3: Variabilă scrisă greșit

fastcgi_cache_bypass $fara_cahce; folosește o variabilă care nu a fost definită nicăieri.

sudo nginx -t

Ieșire în terminal

nginx: [emerg] unknown "fara_cahce" variable
nginx: configuration file /etc/nginx/nginx.conf test failed

Greșeli frecvente

  • Folosești set în blocul http: nu este permis acolo. Pentru valori la nivel de http folosește map.
  • Te aștepți ca set dintr-un location să se aplice înainte de rewrite-ul din server: directivele din faza de rescriere rulează în ordinea în care sunt scrise, mai întâi în server, apoi în location-ul ales.

Comenzi înrudite

  • if: Execută directive doar când o condiție este adevărată. În location este sigur doar cu return și rewrite … last; în rest, folosește map sau blocuri separate.
  • Variabile Nginx ($host, $uri, $args): Variabilele predefinite conțin informații despre cerere: domeniul, calea, parametrii, IP-ul clientului, antetele și cookie-urile.