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 bloculhttp: nu este permis acolo. Pentru valori la nivel dehttpfoloseștemap. - Te aștepți ca
setdintr-unlocationsă se aplice înainte derewrite-ul dinserver: directivele din faza de rescriere rulează în ordinea în care sunt scrise, mai întâi înserver, apoi înlocation-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.