我在一台主机上使用varnish-3.0.6-1而在另一台主机上使用tomcat8。 Tomcat运行正常,但出于某种原因,我无法让varnish后端保持健康。
这是我的配置:
probe healthcheck {
.url = "/openam/";
.timeout = 3 s;
.interval = 10 s;
.window = 3;
.threshold = 2;
.expected_response = 302;
}
backend am {
.host = "<INTERNAL-IP>";
.port = "8090";
.probe = healthcheck;
}
sub vcl_recv {
if (req.request == "PURGE") {
if (!client.ip ~ purgers) {
error 405 "You are not permitted to PURGE";
}
return(lookup);
}
else if (req.http.host == "bla.domain.com" || req.http.host == "<EXTERNAL-IP>") {
set req.backend = am;
}
else if (req.url ~ "\.(ico|gif|jpe?g|png|bmp|swf|js)$") {
unset req.http.cookie;
set req.backend = lighttpds;
}
else {
set req.backend = apaches;
}
}
它总是显示:
Backend_health - am Still sick 4--X-R- 0 2 3 0.001956 0.000000 HTTP/1.1 302
telnet对该主机工作正常,我唯一能解决的问题是卷曲返回302,因为主页面在&lt; openam&#39;之下。在tomcat上重定向到另一个页面。
$ curl -I http://<INTERNAL-IP>:8090/openam/
HTTP/1.1 302
Location: http://<INTERNAL-IP>:8090/openam/config/options.htm
Transfer-Encoding: chunked
Date: Tue, 12 Sep 2017 15:00:24 GMT
有没有办法解决这个问题?
任何建议表示赞赏, 感谢
答案 0 :(得分:0)
根据提供的信息,您正在点击this bug of Varnish 3。
记者有3.0.7,这是现在唯一可用的打包版本,因此您可能需要从源代码构建。
所以考虑到这一点,而且Varnish 3已经很老了,我宁愿建议升级到更新的Varnish 4或5.(重写几行VCL总是比维护从源代码编译的东西和相关的麻烦更容易确保它始终是最新的。
另一个明显的解决方案是调整您的应用程序以在代码中发送HTTP原因,或者可能指向最终重定向位置,该位置可能(或不)已经在HTTP状态中提供原因。
检查curl -IL http://<INTERNAL-IP>:8090/openam/config/options.htm
是否在输出中提供了原因。
如果它类似于HTTP/1.1 200 OK
而不仅仅是HTTP/1.1 200
,那么只需将您的健康状况检查更新为该网址(自然也会调整预期的响应代码)。