2015-07-28 61 views
0

(清漆2.1.5)不同的清漆處理請求的不同方法

我在清漆中出現了一些奇怪的情況。我試圖通過從NodeJS發起的PURGE請求來使緩存對象無效。

我的測試包括請求對象,讓它緩存,然後執行清除請求,然後再次請求(導致提取),然後再次請求它導致刷新緩存對象的命中。

當我通過Firefox調試控制檯測試它時,它工作正常。所有步驟似乎按預期工作。當我在NodeJS中測試整個過程時,它按預期工作,就好了。但是,當我通過Firefox讓對象緩存,然後嘗試通過NodeJS使其無效時,它會報告404 Not in緩存。

我100%確定我使用的是相同的URI,我不知道它爲什麼會這樣做。有沒有人遇到過這個問題?如果是的話,這個問題的解決方案是什麼?

這是我的VCL:

backend default { 
    .host = "127.0.0.1"; 
    .port = "80"; 
} 

acl purge { 
     "localhost"; 
     "*loadbalancer-ip*"; 
} 

sub vcl_recv { 

    if (req.request == "PURGE") { 
      if(!client.ip ~ purge) { 
        error 405 "Not allowed."; 
      } 
      return (lookup); 
    } else if (req.url ~ "(?i)\.(jpeg|jpg|png|gif|ico|js|css|xml)$") { 
      unset req.http.Cookie; 
      return (lookup); 
    } else { 
      return (pass); 
    } 
} 

sub vcl_hit { 
    if (req.request == "PURGE") { 
      set obj.ttl = 0s; 
      error 200 "Purged"; 
    } 
} 

sub vcl_miss { 
    if (req.request == "PURGE") { 
      error 404 "Not in cache."; 
    } 
} 


sub vcl_fetch { 
    if (req.url ~ "(?i)\.(jpeg|jpg|png|gif|ico|js|css|xml)$") { 
      unset beresp.http.set-cookie; 
      return (deliver); 
    } 
} 

sub vcl_deliver { 
    if (obj.hits > 0) { 
      set resp.http.X-Cache = "HIT"; 
    } else { 
      set resp.http.X-Cache = "MISS"; 
    } 
} 

正如你看到的,我的配置是非常簡單的。此配置僅用於測試目的,我知道使用loadbalancer IP並不安全,一旦一切正常,我會將其更改爲使用Forwarded-For IP。

回答

0

隨着該線程的一點幫助: What is the function of the "Vary: Accept" HTTP header?

我才知道,它認爲Vary標頭確定是否緩存與否時,從高速緩存得到哪個版本。

在我的情況下,Vary頭包含User-Agent,這就是爲什麼我從不同方法獲得不同結果的原因。

相關問題