Kustom 503 Halaman Kesalahan Dengan Varnish


Jawaban:


13

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 syntheticpernyataan.

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 -->
        "};
    }
}

ini tidak berfungsi di VCL 4.0 - jika Anda menggunakan vcl 4.0 maka lihat jawaban di bawah ini
Philipp

18

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.


Harap dicatat bahwa ini tidak akan menangkap "kesalahan pengambilan backend". Untuk menangkapnya, Anda juga harus membuat sub vcl_backend_error, seperti yang Anda lihat di serverfault.com/a/665917/102757 dan serverfault.com/a/716767/102757
lucaferrario
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.