2015-07-28 94 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,这就是为什么我从不同方法获得不同结果的原因。

相关问题