我们有 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/