在vcl_synth中我试图修改错误页面;我可能会将此移至vcl_backend_error,但由于问题仍然存在,因此没有实际意义。我使用的是CentOS 7,因此只能访问4.0而不是4.1。这很重要,因为std.file_exists仅存在于> = 4.1中。使用不受信任,未经测试的来源打破向前/向后兼容性的软件包是不可接受的。
要处理503.html文件可能不存在的问题,我想测试合成输出,如果null / empty则生成回退错误页面。为了调试我将所有输出都抛给了syslog;这不会以目前的形式持续生产。
样品:
sub vcl_synth {
if (resp.status == 503) {
set resp.http.Content-Type = "text/html; charset=utf-8";
synthetic(std.fileread("/var/www/vhost/" + req.http.host + "/error/503.html"));
std.syslog(3, "resp.http.body: " + resp.http.body);
return (deliver);
}
}
通过上面我清楚地看到resp.http.body是空的,但是页面被返回并在我的浏览器中呈现。那么,如果确实如此,哪个变量合成集?并且,它可以测试吗?
# journalctl -f
...
Sep 08 02:17:17 REDACTED_HOSTNAME varnishd[32498]: resp.http.body:
请停止
答案 0 :(得分:1)
在synthetic(...)
期间执行vcl_synth
不会填充resp.http.body
。那只是一个随机的标题名称。一种可能的方法是用响应体填充“临时变量”:
sub vcl_synth {
if (resp.status == 503) {
set resp.http.Content-Type = "text/html; charset=utf-8";
set req.http.X-Synth-Body = std.fileread("/var/www/vhost/" + req.http.host + "/error/503.html");
synthetic(req.http.X-Synth-Body);
std.syslog(3, "req.http.X-Synth-Body: " + req.http.X-Synth-Body);
return (deliver);
}
}
答案 1 :(得分:1)
关于:
使用来自不受信任的未经测试的来源的包是不可接受的 打破向前/向后兼容性。
清漆有dedicated repository for 4.1。
这些包是签名的,仅针对4.1分支,不应该向前/向后兼容。
另外,既然您正在使用他们的软件,那么您基本上已经信任他们了。此外,最近的安全更新可能会使其更快地存储到存储库而不是EPEL等。
Varnish 4.0正式EOL。