광택이있는 사용자 지정 503 오류 페이지


답변:


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을 사용하는 경우 아래 답변을 참조하십시오.
Philipp

18

위의 답변은 바니시 3에 대한 것입니다. 질문에 버전 정보가 지정되어 있지 않으므로 버전 4에 대한 답변도 변경 될 때가 포함되어야합니다.

희망적으로 이것은 사람들이 위의 답변을 읽고 vcl_error를 V4 VCL에 넣지 못하게 할 것입니다 :)

니스 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 오류는이 기능을 통해 자동으로 라우팅됩니다.


"백엔드 페치 오류"는 캡처하지 않습니다. 이들을 캡처하려면 serverfault.com/a/665917/102757serverfault.com/a/716767/102757sub vcl_backend_error
lucaferrario
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.