负载均衡服务器下的Varnish

3
我们有两个文件服务器(Apache 端口-82),通过负载均衡器运行。我已经成功为一个域名(imgs.site.com)在这两台服务器(端口-80)上配置了 Varnish,并且当我为该服务器设置主机条目时,它可以正常工作。但是当我通过负载均衡器全局访问时,请求被中止。我猜测我的配置中缺少一些内容。请帮我看看。
以下是我的 VCL 配置,我在 file1 和 file2 服务器上都有相同的配置。
backend default {
  .host = "127.0.0.1";
  .port = "82";
  .first_byte_timeout = 60s;
  .between_bytes_timeout = 60s;
}

sub vcl_recv {

    if (req.request != "GET" &&
         req.request != "HEAD" &&
         req.request != "PUT" &&
         req.request != "POST" &&
        req.request != "TRACE" &&
        req.request != "OPTIONS" &&
         req.request != "DELETE") {

  return (pipe);
 }



if (req.http.host == "imgs.site.com") {

       set req.http.host = "imgs.site.com";
       set req.backend = default;
       return (lookup);
  }

}

这可能是一个基础问题,由于我们对Varnish还不熟悉,我们不知道如何解决它。

1个回答

0

为了澄清,您有一个负载均衡器用于将来自域名imgs.site.com的请求传递到两台机器上的80端口。每台机器都运行着varnish并将请求路由回它们自己的82端口。如果某个新请求被路由到http服务器A,然后同样的请求稍后又被路由到http服务器B,第二个请求将像第一个请求一样慢,并且您最终会在两台机器上缓存相同的查找结果,因此,如果您设置单个varnish并将其用作轮询配置的负载均衡器,则可以获得更好的缓存性能。

但是,要按照现有方式解决问题,您可以在请求到达时运行varnishlog以获取有关varnish如何响应请求的诊断信息。您还可以通过在varnish机器上的shell中运行以下命令来进一步验证从varnish机器到其后端(在本例中为自身)的请求是否有效:

$ telnet 127.0.0.1 82

如果您看到成功消息,请输入基本的GET命令(之后有两个回车):

GET / HTTP/1.0

您可以使用wget或curl命令测试需要身份验证或POST负载的更复杂请求。

当然,通过检查日志来验证http服务器是否收到请求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接