根据请求标头值清除varnish缓存

时间:2017-05-20 11:00:36

标签: varnish vcl varnish-vcl purge

我使用vcl hash基于请求中的某些标头值缓存对象的多个副本。我如何一次清除它们?

1 个答案:

答案 0 :(得分:1)

我的回答是基于您真正想要清除#include <iostream> using namespace std; int main() { int i = 0; cout << "enter a number: "; /* Test the truthiness of cin after the text entry if the user didnt enter an int value the test will return false. */ if(! (cin >> i) ) { cout << "didnt enter a number\n"; return 0; } /* now use knowing value must be int */ switch(i) { case 1: cout << "one\n"; break; // more number cases default: cout << "some other num\n"; break; } } 而不是PURGE的假设:

如果已知某个标头的所有可能值,您将使用重新启动以及设置自定义标头。逻辑如下:

  1. 收到了对BAN
  2. 的对象的PURGE请求
  3. req.http.X-Custom == foo
  4. return(purge)中设置vcl_purge,并使用已清除的值集引入/调整帮助程序标头,并req.http.X-Custom = bar
  5. 因此,Varnish将递归清除所有对象。

    您可以在complete Brotli VCL implementation中看到此方法的示例。

    但是如果某个标题的值确实是任意的,那么您不能同时真正地return (restart)它们。如果您需要这个,您必须使用PURGE,以便Varnish将所有这些对象视为具有多种变体的对象。在Vary: X-Custom到位的情况下,您不必在标题上进行哈希,并且Vary在一个变体上将有效清除所有其他变体。

    我更喜欢PURGE方法。