vcl_synth响应页面,强烈不建议使用。
清除缓存是管理员来使用,不需要太过于华丽的回馈页面,而且设置此synth页面之后很容易报错
生成含有指定内容的http响应报文,并通过return(deliver)发送给客户端。vcl_synth的默认代码如下:
vcl_synth {
set resp.http.Content-Type = "text/html; charset=utf-8";
set resp.http.Retry-After = "5";
synthetic( {"<!DOCTYPE html>
<html>
<head>
<title>"} + resp.status + " " + resp.reason + {"</title>
</head>
<body>
<h1>Error "} + resp.status + " " + resp.reason + {"</h1>
<p>"} + resp.reason + {"</p>
<h3>Guru Meditation:</h3>
<p>XID: "} + req.xid + {"</p>
<hr>
<p>Varnish cache server</p>
</body>
</html> "} );
return (deliver);
}
解释:
设置http头部,然后调用synthetic()函数合成一个页面,然后通过return到deliver把页面发送到客户端。
我们可以通过在指定的subroutine中return(synth(status_code,"reason_phrase"));
来调用vcl_synth并设置resp.http.status和resp.http.reason。
需要注意的是这里return的不是keyword,而是一个内置的具有参数的函数。
{“ 和 ”}用来指示多行字符串
vcl_synth定义的页面对象不会被缓存,而vcl_backend_error定义的页面对象会被缓存
vcl_backend_error响应页面
实例2:
sub vcl_backend_error {
if (beresp.status == 503) {
set beresp.status = 200;
synthetic(
{"
<html>
<body>
<h1>We don't like ugly page!</h1>
</body>
</html>
"}
);
return (deliver);
}
}
作用:varnish作为反代去向后端server拿数据,如果拿不到数据,则默认返回一个503的status code给客户端,
同时给出一个预定义的页面(该页面是写在vcl_backend_error中的)。
给出200返回值和一个更加友好的页面