Varnish 不缓存带有特定词的 url
Varnish not to cache urls with specific word
我正在使用 Varnish 4.0.3 作为反向代理缓存和负载平衡器。
我想避免对以 /api/v1/
开头的 link 或在其 link 中包含 feed
的任何 link 进行清漆缓存,并为来自后端的请求提供服务服务器直接。
我这样做了:
sub vcl_recv {
if ((req.url ~ "^/api/v1/" || req.url ~ "feed") &&
req.http.host ~ "api.example.com") {
set req.backend_hint = apis.backend();
}
但是根据访问日志,它服务于来自后端的第一个请求,然后它直接服务于来自清漆的新请求!我做错了什么吗?或者还有什么我需要做的吗?
应该是:
sub vcl_recv {
if ((req.url ~ "^/api/v1/" || req.url ~ "feed")
&& req.http.host == "api.example.com") {
return (pass);
}
}
return (pass)
将 Varnish 切换为匹配请求的 pass 模式。在传递模式下,Varnish 既不会将结果放入缓存,也不会从缓存中传递(总是与后端对话)。
一种微优化正在使用 ==
运算符匹配 req.http.host
。在这种情况下并不真正需要正则表达式匹配。
我正在使用 Varnish 4.0.3 作为反向代理缓存和负载平衡器。
我想避免对以 /api/v1/
开头的 link 或在其 link 中包含 feed
的任何 link 进行清漆缓存,并为来自后端的请求提供服务服务器直接。
我这样做了:
sub vcl_recv { if ((req.url ~ "^/api/v1/" || req.url ~ "feed") && req.http.host ~ "api.example.com") { set req.backend_hint = apis.backend(); }
但是根据访问日志,它服务于来自后端的第一个请求,然后它直接服务于来自清漆的新请求!我做错了什么吗?或者还有什么我需要做的吗?
应该是:
sub vcl_recv {
if ((req.url ~ "^/api/v1/" || req.url ~ "feed")
&& req.http.host == "api.example.com") {
return (pass);
}
}
return (pass)
将 Varnish 切换为匹配请求的 pass 模式。在传递模式下,Varnish 既不会将结果放入缓存,也不会从缓存中传递(总是与后端对话)。
一种微优化正在使用 ==
运算符匹配 req.http.host
。在这种情况下并不真正需要正则表达式匹配。