caching - LB服务器下的varnish

标签 caching reverse-proxy varnish varnish-vcl

我们有 2 个文件服务器(Apache 端口 82)在负载均衡器下运行。而且我已经为 2 个服务器(端口 80)中的域(imgs.site.com)成功配置了 Varnish ,并且当我为服务器放置主机条目时它可以正常工作但是当我全局访问它时(通过 LB)它会中止要求。我想我的配置中缺少某些东西。请帮助。

这是我的 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 的新手,我们不知道如何解决它。

最佳答案

所以澄清一下,您有一个域 imgs.site.com 的负载均衡器,将请求传递到两台机器上的端口 80。它们中的每一个都在运行 Varnish 并在端口 82 上将请求路由回它们自己。如果一些新请求被路由到 http 服务器 A,然后相同的请求稍后再次出现并被路由到 http 服务器 B,则第二个请求将是和第一个一样慢,你最终会在两台机器上缓存相同的查找,所以如果你设置一个 Varnish 并将它用作负载平衡器,你会得到更好的缓存性能 round-robin configuration .

但要按原样解决它,您可以通过运行 varnishlog 获取有关 Varnish 如何响应请求的诊断信息。当请求进来时。您可以通过从 Varnish 机上的外壳运行来进一步验证从 Varnish 机到其后端(在本例中,它本身)的请求是否有效:

$ telnet 127.0.0.1 82

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

GET / HTTP/1.0

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

当然,还要通过检查日志来验证 http 服务器是否正在接收请求。

关于caching - LB服务器下的varnish,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22839832/

相关文章:

sql - 缓存 SQL 查询

delphi - 如何从Windows获取用于存储缓存缩略图的永久目录?

java - 如何在两个反向代理后面配置keycloak?

Apache 相当于 Nginx `proxy_buffering off`

csrf - javax.servlet.ServletException : Possible CSRF attack. 请参阅 header :

php - 您如何扩展Themosis helpers.php函数?

apache - 当网站在 Tomcat 前使用 Apache Varnish 配置时获取用户机器的 IP 地址

caching - 如何知道特定 ColdFusion 变量或 ColdFusion 作用域的每个属性正在使用多少内存?

php - 如何使用 Laravel PHP 提高具有大量数据的动态 api 调用的性能

java - 限制 Varnish 客户端等待时间,而不是后端时间