2012-09-05 27 views
7

Tengo una configuración de Nginx que funciona bien y sirve archivos estáticos correctamente:Nginx para servir archivos estáticos de varias fuentes

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

Pero lo que yo quiero hacer ahora es que si el archivo estático no existe en /tmp/static, Nginx busca el archivo en /srv/www/site/static. No estoy seguro de cómo lograr eso. He intentado algunas cosas con try_files, pero no sé cómo usarlas correctamente.

Respuesta

8

Puede configurar su raíz en el prefijo común de los dos caminos que desea utilizar (en este caso, es /), a continuación, sólo tiene que especificar el resto de los caminos en los argumentos try_files:

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

Puede parecer desconcertante utilizar root/en una ubicación, pero try_files garantizará que no se publiquen archivos fuera de/tmp/static o/srv/www/site/static.

+0

Por alguna razón, no funciona con $ uri, cuando uso $ request_uri, ¿alguna idea de por qué? – Flavien

+0

$ request_uri se expande a la ruta uri original no procesada desde la línea de solicitud. No se ve afectado por ninguna redirección interna. $ uri es la ruta uri actual que se está procesando, y se modifica mediante redirecciones internas. Supongo que de alguna manera estás redireccionando internamente y eso está causando tu problema. – kolbyjack

-1

Parece que sus necesidades serían atendidas utilizando el SlowFS Cache Module. Almacena en caché su contenido estático en un directorio temporal que, presumiblemente, se almacena en discos más rápidos y gestiona el respaldo por usted.

1

Se puede utilizar una ubicación con nombre de "raíz" con el fin de procesar una serie de lugares de repliegue . Tenga en cuenta que no puede usar "alias" dentro de una ubicación determinada.

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