【问题标题】:prevent Varnish double cache with N subdomains/normalize host only for varnish防止带有 N 个子域的 Varnish 双重缓存/仅针对 varnish 规范化主机
【发布时间】:2014-02-07 20:22:43
【问题描述】:
我有一堆看起来像这样的子域:
http://u-c2f86nr3pa.example.org/?s=1
http://u-v1cfu8dsta.example.org/?s=1
它们的内容不同,但静态文件 CSS/JS/Favicon 是一样的。我想为它们规范化主机名,但我不想为 PHP 脚本规范化它,因为它基于子域工作。
有没有一种方法可以让 varnish 知道这些域是常见的,并且应该为它们缓存一次静态?
【问题讨论】:
标签:
php
regex
apache
varnish
varnish-vcl
【解决方案1】:
您可以在 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 服务器将看到重写后的主机,因此请确保将其规范化为它可以识别的名称。