如何自定义 503 错误 - varnish 4
how to customize 503 error - varnish 4
如何自定义 Varnish 4 的“503 backend fetch failed”?
我正在自定义其他错误,当它们通过合成阶段时:
sub vcl_synth {
if (resp.status == 750) {
set resp.http.location = "http://mobile.cronica.com.ar/";
set resp.status = 302;
set resp.http.Action = "Redirect";
return(deliver);
}
if (resp.status == 751) {
set resp.status = 301;
set resp.http.location = "http://www." + req.http.host + req.url;
set resp.http.Action = "Redirect";
return(deliver);
}
else {
synthetic( {"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>"} + resp.status + " " + resp.reason + {"</title>
<link href='http://fonts.googleapis.com/css?family=Oswald:400,700' rel='stylesheet' type='text/css'>
</head>
<body style="background-color:#444; font-family: 'Oswald', sans-serif;">
<h1 style="color:#DD8363;">Error "} + resp.status + " " + {"</h1>
<p style="color:#5F88C4; ">"} + resp.reason + {"</p>
<h3 style="color:white;">CEPI Says</h3>
<p style="color:#bdb76b;">XID: "} + req.xid + {"</p>
<p style="color:#bdb76b;">Edge-Server: "} + server.hostname + {"</p>
<hr>
<p style="color:#65b042;">2.0</p>
</body>
</html>
"} );
return(deliver);
}
}
但 503 错误似乎避免了这种情况。
根据Varnish Processing States control after backend_error()
should be passed to vcl_synth()
, but in reality the error page you are seeing is delivered unconditionally in backend_error()
of builtin.vcl
。您要么在那里自定义您的网页,要么在您的 vcl 中添加 sub vcl_backend_error { return(retry); }
以强制跳转到 vcl_synth()
,这将包含 resp.status = 503
.
如何自定义 Varnish 4 的“503 backend fetch failed”?
我正在自定义其他错误,当它们通过合成阶段时:
sub vcl_synth {
if (resp.status == 750) {
set resp.http.location = "http://mobile.cronica.com.ar/";
set resp.status = 302;
set resp.http.Action = "Redirect";
return(deliver);
}
if (resp.status == 751) {
set resp.status = 301;
set resp.http.location = "http://www." + req.http.host + req.url;
set resp.http.Action = "Redirect";
return(deliver);
}
else {
synthetic( {"
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>"} + resp.status + " " + resp.reason + {"</title>
<link href='http://fonts.googleapis.com/css?family=Oswald:400,700' rel='stylesheet' type='text/css'>
</head>
<body style="background-color:#444; font-family: 'Oswald', sans-serif;">
<h1 style="color:#DD8363;">Error "} + resp.status + " " + {"</h1>
<p style="color:#5F88C4; ">"} + resp.reason + {"</p>
<h3 style="color:white;">CEPI Says</h3>
<p style="color:#bdb76b;">XID: "} + req.xid + {"</p>
<p style="color:#bdb76b;">Edge-Server: "} + server.hostname + {"</p>
<hr>
<p style="color:#65b042;">2.0</p>
</body>
</html>
"} );
return(deliver);
}
}
但 503 错误似乎避免了这种情况。
根据Varnish Processing States control after backend_error()
should be passed to vcl_synth()
, but in reality the error page you are seeing is delivered unconditionally in backend_error()
of builtin.vcl
。您要么在那里自定义您的网页,要么在您的 vcl 中添加 sub vcl_backend_error { return(retry); }
以强制跳转到 vcl_synth()
,这将包含 resp.status = 503
.