寻找理想的设置,包括nginx作为我们的顶层负载均衡器,负载分布在多个Varnish实例中。
什么是分配这个负载的最佳方式? 一种方法是简单地在实例之间均匀分配,另一种方式是根据请求URL模式分配负载。 有这个最好的做法吗?
另外 – 我们需要手动(从后端)清除caching中的特定项目。 要做到这一点,最简单的方法是向我们的每个Varnish实例发出一个小的HTTP“PURGE”请求。
什么是分配这个负载的最佳方式? 一种方法是简单地在实例之间均匀分配,另一种方式是根据请求URL模式分配负载。 有这个最好的做法吗?
这取决于。 有两个原因,你想基地分配像URL哈希:
另外 – 我们需要手动(从后端)清除caching中的特定项目。 要做到这一点,最简单的方法是向我们的每个Varnish实例发出一个小的HTTP“PURGE”请求。
这是有效的,但留下内容的下一个请求者可能缓慢的caching未命中。 另一种方法是使用Varnish的req.hash_always_miss来强制更新caching中的资源,而不是仅仅使其无效,所以来自外部的请求不会被强制丢失。
所以在你的vcl里有这样的东西:
acl purge { "localhost"; } sub vcl_recv { /* add this into your existing config: */ if (req.http.X-Varnish-Nuke == "1" && client.ip ~ purge) { set req.hash_always_miss = true; } }
然后,带有该头部集合的请求将强制后端请求更新caching中的内容(使用curl或wget, – --header "X-Varnish-Nuke: 1" )。