2012-09-05 53 views
7

我有一個Nginx的配置工作正常和正常提供靜態文件提供靜態文件:獲得Nginx的從不同的來源

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

但我想現在要做的是,如果靜態文件不存在在/tmp/static中,Nginx在/srv/www/site/static中查找該文件。我不知道如何實現這一點,我已經嘗試了一些try_files的東西,但我不知道如何正確使用它。

回答

8

您可以將根目錄設置爲你想要使用的兩個路徑的共同的前綴(在這種情況下,它是/),則只需指定路徑的其餘部分在try_files ARGS:

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

在一個位置使用root /看起來可能令人不安,但是try_files將確保不會提供/ tmp/static或/ srv/www/site/static之外的文件。

+0

出於某種原因,它不能與$ uri一起使用,當我使用$ request_uri它的時候,任何想法爲什麼? – Flavien

+0

$ request_uri從請求行展開爲原始未處理的uri路徑。它不受任何內部重定向影響。 $ uri是當前正在處理的uri路徑,它由內部重定向改變。我猜你會以某種方式在內部重定向,這就是你的問題。 – kolbyjack

-1

看來您的需求將通過使用SlowFS Cache Module來服務。它將您的靜態內容緩存在大概存儲在更快磁盤上的臨時目錄中,併爲您管理備用。

1

您可以使用一個命名的位置與「根」 。請注意,您不能在指定位置使用「別名」。

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