首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有清漆的自定义503错误页

带有清漆的自定义503错误页
EN

Server Fault用户
提问于 2011-03-16 11:56:44
回答 2查看 20.9K关注 0票数 15

我如何告诉Varnish显示自定义html错误页而不是默认的“大师冥想”讯息

EN

回答 2

Server Fault用户

回答已采纳

发布于 2011-03-29 12:49:16

清漆常见问题建议为此使用vcl_error (这就是我所做的):

这是错误页面的默认VCL:

代码语言:javascript
运行
复制
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语句中的标记。

如果您希望对不同的错误代码有不同的标记,您也可以很容易地做到这一点:

代码语言:javascript
运行
复制
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 -->
        "};
    }
}
票数 16
EN

Server Fault用户

发布于 2014-08-14 03:12:54

请注意,上面的答案是针对Varnish 3的。由于这个问题没有指定版本信息,所以当版本4也发生了变化时,包含这个答案似乎是一个合适的时间。

希望这将避免人们阅读上面的答案,并将vcl_error放入V4 VCL :)

用于清漆4.0的

内置VCLsub 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中抛出错误,则不再使用“error”函数,而应该这样做: return (synth(405)); 另外,来自后端的413、417和503错误是通过此功能自动路由的。

票数 21
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/248041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档