ฉันจะบอกให้วานิชแสดงหน้าข้อผิดพลาด html ที่กำหนดเองแทนที่จะเป็นข้อความ "Guru Meditation" ที่เป็นค่าเริ่มต้นได้อย่างไร
ฉันจะบอกให้วานิชแสดงหน้าข้อผิดพลาด html ที่กำหนดเองแทนที่จะเป็นข้อความ "Guru Meditation" ที่เป็นค่าเริ่มต้นได้อย่างไร
คำตอบ:
วานิชคำถามที่พบบ่อยแนะนำให้ใช้สำหรับ vcl_error นี้ (และมันเป็นวิธีที่ผมเคยทำก่อน):
นี่คือ VCL เริ่มต้นสำหรับหน้าข้อผิดพลาด:
sub vcl_error {
set obj.http.Content-Type = "text/html; charset=utf-8";
synthetic {"
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>"} obj.status " " obj.response {"</title>
</head>
<body>
<h1>Error "} obj.status " " obj.response {"</h1>
<p>"} obj.response {"</p>
<h3>Guru Meditation:</h3>
<p>XID: "} req.xid {"</p>
<address><a href="http://www.varnish-cache.org/">Varnish</a></address>
</body>
</html>
"};
return(deliver);
}
หากคุณต้องการรุ่นที่กำหนดเองเพียงแค่แทนที่ฟังก์ชั่นในการกำหนดค่าของคุณและแทนที่มาร์กอัปในsynthetic
คำสั่ง
หากคุณต้องการมีมาร์กอัปที่แตกต่างกันสำหรับรหัสข้อผิดพลาดที่แตกต่างกันคุณสามารถทำได้อย่างง่ายดายเช่นกัน:
sub vcl_error {
set obj.http.Content-Type = "text/html; charset=utf-8";
if (obj.status == 404) {
synthetic {"
<!-- Markup for the 404 page goes here -->
"};
} else if (obj.status == 500) {
synthetic {"
<!-- Markup for the 500 page goes here -->
"};
} else {
synthetic {"
<!-- Markup for a generic error page goes here -->
"};
}
}
โปรดทราบว่าคำตอบข้างต้นมีไว้สำหรับวานิช 3 เนื่องจากคำถามไม่ได้ระบุข้อมูลรุ่นดูเหมือนว่าเวลาที่เหมาะสมในการรวมคำตอบสำหรับเวอร์ชัน 4 รวมถึงการเปลี่ยนแปลงด้วย
หวังว่านี่จะช่วยผู้คนจากการอ่านคำตอบข้างต้นและนำ vcl_error ไปไว้ใน V4 VCL ของพวกเขา :)
Builtin VCL สำหรับวานิช 4.0
sub 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);
}
โปรดทราบด้วยว่าหากคุณต้องการทิ้งข้อผิดพลาดจากภายใน VCL ของคุณคุณจะไม่ใช้ฟังก์ชัน 'ข้อผิดพลาด' อีกต่อไปแทน:
return (synth(405));
นอกจากนี้ข้อผิดพลาด 413, 417 และ 503 จากแบ็กเอนด์จะถูกส่งแบบอัตโนมัติผ่าน funtion นี้
sub vcl_backend_error
ตามที่เห็นในserverfault.com/a/665917/102757และserverfault.com/a/716767/102757