我有一堆看起来像的子域:
http://u-c2f86nr3pa.example.org/?s=1
http://u-v1cfu8dsta.example.org/?s=1
它们的内容不同,但静态文件 CSS/JS/Favicon 是相同的。我想为它们规范化主机名,但我不想为 PHP 脚本规范化它,因为它基于子域工作。
有没有一种方法可以教 Varnish 这些域是常见的,并且应该为它们缓存一次静态?
最佳答案
您可以在Varnish配置的 vcl_recv 部分中有条件地重写Host header 。您将需要一种方法来标识哪些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服务器将看到重写的主机,因此请确保将其标准化为它可以识别的名称。
关于php - 防止带有 N 个子域的 Varnish 双缓存/仅用于 varnish 的规范化主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21203952/