Variabile Nginx ($host, $uri, $args) în Nginx

Blocuri de bază Toate versiunile Nginx ($realip_remote_addr: 1.9.7+)

Variabilele predefinite conțin informații despre cerere: domeniul, calea, parametrii, IP-ul clientului, antetele și cookie-urile.

Sintaxă
$host  $uri  $request_uri  $args  $arg_nume  $remote_addr  $scheme
$http_nume_antet  $cookie_nume  $status  $request_time

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_host conț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.