Varnish 缓存如何处理不同的域?

Varnish 缓存如何处理不同的域?

我刚刚开始阅读有关 Varnish 的信息,并考虑将其用作我的 Web 服务器的前端。我的 Web 服务器上有多个域,当使用相同的查询字符串时,它们会获取相同的内容。假设一个客户端访问:

http://domain1.com/script.php?string1=abc&string2=123

后来又有人来访:

http://domain2.com/script.php?string1=abc&string2=123

Varnish 会缓存第一次访问的结果并将其用于第二个客户端吗?谢谢!

编辑:经过进一步阅读后,听起来下面的方法可能有效:

sub vcl_hash {
    set req.hash += req.url;
    return (hash);
}

因此,它不会将 http.host 变量添加到哈希中,而是忽略它。

答案1

你可以配置它来执行此操作,某种程度上。默认情况下,它不会(也不应该)执行此操作。

Varnish 常见问题解答/如何

我有一个拥有多个主机名的网站,如何防止它们增加缓存?

您可以通过规范化所有主机名的“Host”标头来实现这一点。以下是一个 VCL 示例:

if (req.http.host ~ "^(www.)?example.com") { set req.http.host = "example.com"; }

答案2

我的虚拟机上有 3 个域,我正在使用 Nginx 和 Varnish,目前我处于预生产配置,我正在执行以下操作:

NGINX:80 ==> VARNISH:8080 ==> NGINX:8081

如果域名需要 Varnish,我会使用 Nginx:80 作为代理,如果不需要,我会使用 FastCGI。在这个例子中,非 Varnish 站点不受 Varnish 的影响。它看起来很蠢,但很管用 ;-) 而且我的客户都没有抱怨(目前……)。

相关内容