Ce face Variabile Nginx ($host, $uri, $args)
Nginx pune la dispoziție zeci de variabile, folosite în return, rewrite, proxy_set_header, log_format, map sau if. Ele se calculează pentru fiecare cerere.
Diferența importantă: $request_uri este calea exact cum a trimis-o clientul, cu parametri (/cauta?q=iasi), nemodificată. $uri este calea curentă, fără parametri, decodată și normalizată, și se poate schimba după rewrite sau try_files.
Orice antet de cerere este disponibil ca $http_ + numele antetului cu litere mici și liniuțele înlocuite cu _ (User-Agent devine $http_user_agent). Parametrii din URL sunt $arg_nume, iar cookie-urile $cookie_nume.
Parametri
| Parametru | Descriere |
|---|---|
$host |
Domeniul cererii (din antetul Host sau server_name), cu litere mici, fără port. |
$request_uri |
Calea originală, cu parametri. |
$uri |
Calea curentă, fără parametri, normalizată. |
$args / $arg_nume |
Toți parametrii, respectiv un parametru anume. |
$remote_addr |
IP-ul clientului (sau al proxy-ului din fața lui, fără real_ip). |
$scheme |
http sau https. |
$http_nume |
Un antet de cerere, de exemplu $http_referer. |
$status, $request_time |
În jurnale: codul răspunsului și durata cererii. |
Ce returnează
Valorile sunt text; o variabilă care nu are valoare este un text gol.
Exemple
Exemplul 1: Ce conține fiecare variabilă
Configurația de test răspunde cu valorile variabilelor: location / { default_type text/plain; return 200 "host=$host\nrequest_uri=$request_uri\nuri=$uri\nargs=$args\narg_oras=$arg_oras\nscheme=$scheme\n"; }. Opțiunea --path-as-is îi spune lui curl să trimită calea exact așa, cu ../, ca să vezi diferența dintre $request_uri și $uri.
curl -s --path-as-is 'https://exemplu.ro/cauta/../produse?oras=Iasi&pagina=2'
Ieșire în terminal
host=exemplu.ro
request_uri=/cauta/../produse?oras=Iasi&pagina=2
uri=/produse
args=oras=Iasi&pagina=2
arg_oras=Iasi
scheme=https
Exemplul 2: Redirecționare care păstrează calea și parametrii
server {
listen 80;
server_name exemplu.ro www.exemplu.ro;
return 301 https://exemplu.ro$request_uri;
}
Greșeli frecvente
- Folosești
$uriîntr-o redirecționare și se pierd parametrii (?pagina=2). Folosește$request_uri. - Folosești
$http_hostîn loc de$host:$http_hostconține exact ce a trimis clientul (inclusiv portul sau litere mari) și poate lipsi la cererile HTTP/1.0.
Comenzi înrudite
set: Creează sau schimbă o variabilă în configurația Nginx. Valoarea poate combina text și alte variabile.