कस्टम 503 त्रुटि पृष्ठ वार्निश के साथ


15

मैं डिफ़ॉल्ट "गुरु ध्यान" संदेश के बजाय कस्टम HTML त्रुटि पृष्ठ दिखाने के लिए वार्निश को कैसे बता सकता हूं ?


कुछ इनलाइन C के साथ किया जा सकता है, देखें: mohanjith.net/blog/2009/08/…
3molo

धन्यवाद, आप उस टिप्पणी को एक सुझाया हुआ उत्तर क्यों नहीं बनाते?
क्रिश्चियन डेवन

जवाबों:


13

वार्निश पूछे जाने वाले प्रश्न इस के लिए 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 -->
        "};
    }
}

यह VCL 4.0 में काम नहीं करता है - यदि आप vcl 4.0 का उपयोग करते हैं, तो नीचे उत्तर देखें
फिलिप

18

ध्यान दें कि उपरोक्त उत्तर वार्निश 3 के लिए हैं। चूंकि प्रश्न संस्करण की जानकारी को निर्दिष्ट नहीं करता है, इसलिए संस्करण 4 के उत्तर को भी शामिल करने के लिए उचित समय लगता है क्योंकि यह बदल गया है।

उम्मीद है कि यह लोगों को उपरोक्त उत्तरों को पढ़ने और उनके V4 VCL में vcl_error लगाने से बचाएगा :)

वार्निश 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 त्रुटियां इस फ़ंडन के माध्यम से स्वचालित रूप से रूट की जाती हैं।


कृपया ध्यान दें कि यह "बैकेंड लाने की त्रुटियों" पर कब्जा नहीं करेगा। उन्हें पकड़ने के लिए, आपको एक भी बनाना होगा sub vcl_backend_error, जैसा कि आप serverfault.com/a/665917/102757 और serverfault.com/a/716767/102757
lucaferrario
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.