Bagaimana saya bisa memberi tahu Varnish untuk menampilkan halaman kesalahan html khusus alih-alih pesan "Guru Meditasi" default ?
Bagaimana saya bisa memberi tahu Varnish untuk menampilkan halaman kesalahan html khusus alih-alih pesan "Guru Meditasi" default ?
Jawaban:
The Varnish FAQ menyarankan menggunakan vcl_error untuk ini (dan itu bagaimana saya sudah melakukannya):
Ini adalah VCL default untuk halaman kesalahan:
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);
}
jika Anda menginginkan versi khusus, cukup timpa fungsi di konfigurasi Anda dan ganti markup dalam synthetic
pernyataan.
Jika Anda ingin memiliki markup berbeda untuk kode kesalahan yang berbeda, Anda juga dapat melakukannya dengan cukup mudah:
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 -->
"};
}
}
Perhatikan bahwa jawaban di atas adalah untuk Varnish 3. Karena pertanyaan tidak menentukan informasi versi, sepertinya waktu yang tepat untuk memasukkan jawaban untuk Versi 4 juga karena telah berubah.
Semoga ini akan menyelamatkan orang dari membaca jawaban di atas dan memasukkan vcl_error ke V4 VCL mereka :)
Builtin VCL untuk Varnish 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);
}
Perhatikan juga bahwa jika Anda ingin melempar kesalahan dari dalam VCL Anda, Anda tidak lagi menggunakan fungsi 'kesalahan', sebaliknya Anda akan melakukan:
return (synth(405));
Juga, 413, 417 dan 503 kesalahan dari backend secara otomatis dialihkan melalui fungsi ini.
sub vcl_backend_error
, seperti yang Anda lihat di serverfault.com/a/665917/102757 dan serverfault.com/a/716767/102757