防止Varnish双缓存与N子域/规范化主机仅用于清漆

时间:2014-01-18 12:14:47

标签: php regex apache varnish varnish-vcl

我有一堆子域,看起来像:

http://u-c2f86nr3pa.example.org/?s=1
http://u-v1cfu8dsta.example.org/?s=1

他们的内容不同,但静态文件CSS / JS / Favicon是相同的。我想为它们规范化主机名,但我不想为PHP脚本规范它,因为它基于子域工作。

我有没有办法教清漆这些域是常见的,静态应该缓存一次?

1 个答案:

答案 0 :(得分:2)

您可以有条件地重写Varnish配置的 vcl_recv 部分中的Host标头。您需要一种方法来识别哪些URL是静态内容。这是一个例子;具体的正则表达式将取决于您的网站的结构。

sub vcl_recv {
    # Normalize Host if URL is one of:
    #     /css/*   /js/*   /favicon*
    if (req.http.Host ~ "^u-\w+\.example\.org$" &&
        req.url ~ "^/(css/|js/|favicon)")
    {
        set req.http.Host = "u-xxxxxxxxx.example.org";
    }
}

您的后端Web服务器将看到重写的主机,因此请确保您标准化为其识别的名称。