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
aliascândlocationse 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ălocationare/la final, pune/și laalias. - Folosirea
rootînlocation /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.