Soru Vernikli Özel 503 Hata Sayfası


Varnish yerine özel bir html hata sayfası göstermesini nasıl söyleyebilirim varsayılan "Guru Meditasyon" mesajı?


15
2018-03-16 11:56


Menşei


Bazı satır içi C ile yapılabilir, bakın: mohanjith.net/blog/2009/08/... - 3molo
Teşekkürler, neden bu yorumu önerilen bir cevap yapmıyorsunuz? - Christian Davén


Cevaplar:


Vernik SSS Bunun için vcl_error kullanılmasını önerir (ve ben bunu nasıl yaptım):

Bu, hata sayfası için varsayılan VCL'dir:

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

Özel bir sürüm istiyorsanız, yapılandırmanızdaki işlevi geçersiz kılın ve işaretlemeyi synthetic Beyan.

Farklı hata kodları için farklı işaretlemelere sahip olmak istiyorsanız, bunu da kolayca yapabilirsiniz:

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

13
2018-03-29 12:49



Bu, VCL 4.0'da çalışmaz - eğer vcl 4.0 kullanıyorsanız, aşağıya bakın - Philipp


Yukarıdaki cevapların Varnish 3 için geçerli olduğuna dikkat ediniz. Soru sürüm bilgisi belirtmediği için, sürüm 4'ün de değiştirdiği gibi cevabı dahil etmek için uygun bir zaman gibi görünüyor.

İnşallah bu, insanları yukarıdaki cevapları okumadan ve vcl_error'larını V4 VCL'ye koymadan koruyacaktır :)

Varnish 4.0 için yerleşik VCL

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

Ayrıca, VCL’nizden bir hata atmak isterseniz, artık 'error' işlevini kullanmayacağınızı, bunun yerine aşağıdakileri yapacağınızı unutmayın:

return (synth(405));

Ayrıca, arka uçtan 413, 417 ve 503 hataları bu işlevin üzerinden otomatik olarak yönlendirilir.


18
2017-08-14 03:12



Lütfen bunun "backend getirme hataları" yakalanmayacağını unutmayın. Bunları yakalamak için bir de sub vcl_backend_error, içinde görebileceğiniz gibi serverfault.com/a/665917/102757 ve serverfault.com/a/716767/102757 - lucaferrario