root / alias în Nginx

Blocuri de bază Toate versiunile Nginx

Stabilesc directorul de pe disc din care sunt servite fișierele: root lipește întregul URI, alias înlocuiește prefixul location.

Sintaxă
root cale;
alias cale;

Ce face root / alias

Directivele root și alias fac legătura dintre URL-ul cerut de client și calea reală de pe disc, dar calculează acea cale diferit. Cu root, Nginx adaugă întregul URI la sfârșitul căii: dacă în location /imagini/ scrii root /var/www/site;, o cerere pentru /imagini/logo.png caută fișierul /var/www/site/imagini/logo.png.

Cu alias, Nginx înlocuiește partea potrivitǎ de location cu calea indicată: în location /imagini/ cu alias /srv/media/poze/;, aceeași cerere /imagini/logo.png caută /srv/media/poze/logo.png (partea /imagini/ nu mai este adăugată).

Regula practică: pune un singur root la nivel de server pentru întregul site și folosește alias doar atunci când un sub-URL (/downloads/, /static/) trebuie servit dintr-un director aflat în altă parte pe disc. Împreună cu root se folosește aproape întotdeauna directiva index (implicit index.html).

Opțiuni și argumente

Opțiune / Parametru Descriere
Context root: http, server, location, if Se pune de regulă în server, ca să fie moștenit de toate blocurile location.
Context alias: location alias poate fi folosit doar în interiorul unui bloc location.
cale Calea pe disc (recomandat absolută); poate conține variabile, cu excepția $document_root și $realpath_root.
index fișier ... Fișierele încercate în ordine când URI-ul se termină cu / (de exemplu index index.php index.html;).
$document_root Variabila internă care conține calea rezultată din root/alias pentru cererea curentă.
$realpath_root Ca $document_root, dar cu toate legăturile simbolice rezolvate într-o cale canonică.

Exemple

Exemplul 1: Diferența dintre root și alias

Comentariile arată ce fișier de pe disc este căutat pentru fiecare cerere:

server {
    listen 80;
    server_name example.com;

    # Cererea /despre.html -> /var/www/example.com/public/despre.html
    # Cererea /css/app.css -> /var/www/example.com/public/css/app.css
    root /var/www/example.com/public;
    index index.html;

    # Cu root: /static/app.js -> /var/www/example.com/public/static/app.js
    location /static/ {
        expires 30d;
    }

    # Cu alias: /arhiva/raport.pdf -> /mnt/stocare/documente/raport.pdf
    location /arhiva/ {
        alias /mnt/stocare/documente/;
    }
}

Exemplul 2: Listarea automată a unui director de descărcări

Dacă în director nu există index.html, autoindex on generează o pagină cu lista fișierelor:

location /downloads/ {
    alias /srv/releases/;
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
}

Greșeli frecvente

  • Uitarea slash-ului final în alias când location se termină cu /: location /img/ { alias /var/data/images; } caută /var/data/imageslogo.png. Mai grav, location /img { alias /var/data/images/; } permite accesul la /img../secret (vulnerabilitate de tip path traversal „off-by-slash”). Dacă location are / la final, pune / și la alias.
  • Folosirea root în location /imagini/ cu valoarea /var/www/site/imagini: Nginx caută /var/www/site/imagini/imagini/logo.png (directorul este dublat).

Comenzi înrudite

  • location: Potrivește calea URI a cererii (exact, cu prefix sau cu expresie regulată) și aplică regulile corespunzătoare.
  • try_files: Verifică pe rând existența fișierelor sau directoarelor și redirecționează intern către ultimul argument dacă niciunul nu există.
  • server: Definește un server virtual (un site) cu porturile, numele de domeniu și regulile sale.