来自Varnish的用户友好的错误页面

Mik*_*maa 13 plone varnish

我们在Plone的前面使用Varnish.在Plone发生故障或内部错误的情况下,我们希望显示一个用户友好的静态HTML页面,其中包含一些CSS样式+图像.("服务器正在更新页面")

如何配置Varnish来做到这一点?

bwi*_*ght 19

另一种简单的方法是使用清漆附带的std vmod.这是我的首选方法,因为我希望在配置之外输入错误消息,以防您想要为不同的状态代码提供多个响应.

import std;

sub vcl_error {
    set obj.http.Content-Type = "text/html; charset=utf-8";
    synthetic std.fileread("/path/to/file.html");

    return (deliver);
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,std.fileread只读取一次并缓存,直到重新加载varnish. (4认同)

Rig*_*ala 15

您可以自定义在vlc_error上提供的合成页面.default.vcl配置文件已经显示了如何执行此操作,通过提供着名的"Guru Meditation"错误页面(啊,那些精彩的Amiga日).

示例定制:

    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>Sorry, server under maintainance - My Website"</title>
        <style src="css/style.css"></style>
      </head>
      <body>
        <h1>The server is being updated</h1>
        <p>Please check back later. Meanwhile, here's a picture of a rabbit with a pancake on its head:</p>
        <img src="img/wabbit.jpg" alt="awwwww!" />
      </body>
    </html>
    "};
    return (deliver);
}
Run Code Online (Sandbox Code Playgroud)

  • 这假设如果后端服务器关闭,css/style.css和img/wabbit.jpg将可用.虽然您可以使用类似的合成来提供CSS文件,但Varnish在VCL中还没有二进制字符串,所以提供wabbit.jpg是不可能的.有些浏览器支持内联base64编码数据网址,但绝不是全部,因此您可能需要在备份静态服务器上引导请求,或在另一台服务器上引用图像/资源(Amazon S3可能是一个不错的选择.) (4认同)

Tom*_*der 5

目前,使用 Varnish 4 执行此操作没有太多帮助。

这是我最终得到的结果:

sub vcl_backend_error {
    set beresp.http.Content-Type = "text/html; charset=utf-8";
    synthetic(std.fileread("/var/www/errors/500.html"));
    return (deliver);
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅升级到 4.0 文档