【发布时间】:2017-07-14 14:14:21
【问题描述】:
我使用 varnish 4.0.3 作为反向代理缓存和负载平衡器。
我想避免对以/api/v1/ 开头的链接或在其链接中包含feed 的任何链接进行清漆缓存,并直接为来自后端服务器的请求提供服务。
我已经这样做了:
但是根据访问日志,它服务于来自后端的第一个请求,然后它直接服务于来自 varnish 的新请求!我做错什么了吗?或者我还有什么需要做的吗?
【问题讨论】:
我使用 varnish 4.0.3 作为反向代理缓存和负载平衡器。
我想避免对以/api/v1/ 开头的链接或在其链接中包含feed 的任何链接进行清漆缓存,并直接为来自后端服务器的请求提供服务。
我已经这样做了:
但是根据访问日志,它服务于来自后端的第一个请求,然后它直接服务于来自 varnish 的新请求!我做错什么了吗?或者我还有什么需要做的吗?
【问题讨论】:
应该是:
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。在这种情况下,并不真正需要正则表达式匹配。
【讨论】: