ニスを含むカスタム503エラーページ


15

デフォルトの「Guru Meditation」メッセージの代わりにカスタムHTMLエラーページを表示するようにVarnishに指示するにはどうすればよいですか?


いくつかのインライン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

上記の回答はVarnish 3に対するものであることに注意してください。質問ではバージョン情報を指定していないため、バージョン4の回答も変更されたため、適切な時期に含めるようです。

これにより、人々が上記の回答を読んでvcl_errorをV4 VCLに入れないようになりますように。

Varnish 4.0のビルトイン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);
}

また、VCL内からエラーをスローする場合は、「エラー」関数を使用せず、代わりに次のようにします。

return (synth(405));

また、バックエンドからの413、417、および503エラーは、この機能を介して自動的にルーティングされます。


これは「バックエンドフェッチエラー」をキャプチャしないことに注意してください。それらをキャプチャするために、あなたも作成しなければなりませんsub vcl_backend_errorあなたが見ることができるよう、serverfault.com/a/665917/102757serverfault.com/a/716767/102757
lucaferrario
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.