2012-09-05 27 views
7

ho una configurazione Nginx che funziona bene e serve file statici correttamente:Ottenere Nginx per servire i file statici da diverse fonti

location /static/ { 
    alias /tmp/static/; 
    expires 30d; 
    access_log off; 
} 

Ma quello che voglio fare ora è che se il file statico non esiste in /tmp/static, Nginx cerca il file in /srv/www/site/static. Non sono sicuro di come ottenere ciò, ho provato alcune cose con try_files, ma non so come usarlo correttamente.

risposta

8

È possibile impostare il root per il prefisso comune dei due percorsi che si desidera utilizzare (in questo caso, è /), poi basta specificare il resto dei sentieri nei try_files args:

location /static/ { 
    root /; 
    try_files /tmp$uri /srv/www/site$uri =404; 
    expires 30d; 
    access_log off; 
} 

Potrebbe sembrare sconcertante usare root/in una posizione, ma try_files garantirà che nessun file esterno a/tmp/static o/srv/www/site/static sarà servito.

+0

Per qualche motivo, non funziona con $ uri, quando uso $ request_uri, qualsiasi idea, perché? – Flavien

+0

$ request_uri si espande nel percorso uri originale non elaborato dalla riga di richiesta. Non è influenzato da alcun reindirizzamento interno. $ uri è il percorso uri corrente in elaborazione e viene modificato da reindirizzamenti interni. Immagino che in qualche modo ti stai reindirizzando internamente e questo sta causando il tuo problema. – kolbyjack

-1

Sembra che le vostre esigenze sarebbero state servite utilizzando lo SlowFS Cache Module. Memorizza nella cache il contenuto statico in una directory temporanea presumibilmente archiviata su dischi più veloci e gestisce il fallback per te.

1

è possibile utilizzare una posizione denominata con "root" al fine di elaborare una serie di posizioni di ripiego . Si noti che non è possibile utilizzare "alias" all'interno di una posizione denominata.

location/{ 
    root /path/to/primary/html; 
    try_files $uri $uri/ @fallback; 
} 
location @fallback { 
    root /path/to/secondary/html; 
    try_files $uri $uri/ =404; 
}