2014-11-05 66 views
0

我是nginx新手,所以我不確定這是否可能。nginx - 創建多個緩存路徑

不過,我試圖創建從未緩存的網站使用。

我天真地試圖在我的HTTP設置這些塊:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=short:10m; 
proxy_cache short; 
proxy_cache_key "short:$scheme$proxy_host$uri$is_args$args"; 
proxy_cache_valid 2m; 

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=long:10m; 
proxy_cache long; 
proxy_cache_key "long:$scheme$proxy_host$uri$is_args$args"; 
proxy_cache_valid 1h; 

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=day:10m; 
proxy_cache never; 
proxy_cache_key "long:$scheme$proxy_host$uri$is_args$args"; 
proxy_cache_valid 1d; 

proxy_cache off; 

在重新加載,這將引發以下錯誤:

[emerg]: "proxy_cache" directive is duplicate in

我怎麼能設置不同的緩存路徑之間共享我的虛擬主機?

回答

2

proxy_cache指令是指「利用這個緩存現在該塊」所以,當你使用這個指令多次nginx的不能確定要使用的緩存和節目和錯誤。您必須執行的操作是刪除proxy_cacheproxy_cache_valid指令,並在位置和/或服務器塊中一次使用其中的一個。

你必須知道的proxy_cacheproxy_cache_valid指令的使用在if塊是被禁止的,所以你可能不會得到你想要的這種方式(我假設你會選擇基於一些測試特定的高速緩存)。

因此,另一種方法是在上游回覆中使用特定標題。您可以使用下面的標題之一來設置緩存時間:

  • X-Accel-Expires
  • Cache-Control
  • Expires

Nginx的將默認兌現這些頭。你可以告訴他在用proxy_ignore_headers決定緩存時間時忽略其中的一部分。

+0

謝謝。要清楚,不可能預先定義多個代理緩存?你必須定義一個或重新定義他們的虛擬主機/服務器? – 2014-11-07 18:04:25

+0

Proxy_cache_path在http塊中可以多次使用。 Proxy_cache和proxy_cache_valid可用於位置塊和服務器塊,但不會在這些塊中重複指令。 – 2014-11-07 18:10:45

+1

好的。我試圖根據長壽來預定義一些不同的緩存,然後在它們之間切換不同的*位置*。但是,這聽起來像是不可能的。看起來方法是定義一個緩存,然後改變長度(使用proxy_cache_valid)用於不同的*位置*。 – 2014-11-07 19:33:40