Удобные страницы ошибок от Varnish - PullRequest
13 голосов
/ 11 мая 2011

Мы используем лак в передней части Plone. В случае, если Plone выходит из строя или выдает внутреннюю ошибку, мы хотели бы показать удобную статическую HTML-страницу с некоторыми стилями CSS + изображения. («Страница сервера обновляется»)

Как настроить Varnish для этого?

Ответы [ 4 ]

19 голосов
/ 21 января 2013

Еще один простой способ сделать это - использовать стандартный vd, который поставляется с лаком. Это мой предпочтительный способ сделать это, потому что мне нравится иметь сообщения об ошибках вне конфигурации, если вы хотите иметь несколько ответов для разных кодов состояния.

import std;

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

    return (deliver);
}
15 голосов
/ 11 мая 2011

Вы можете настроить синтетическую страницу, обслуживаемую в vlc_error. Файл конфигурации default.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>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);
}
4 голосов
/ 06 сентября 2014

На данный момент нет большой помощи для этого с 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);
}

Для получения дополнительной информации см. Обновление до 4.0 документов .

2 голосов
/ 26 сентября 2011

Если вы предпочитаете доставлять страницу ошибки из статического файла, вы можете переопределить vcl_error () с помощью небольшого C-кода:

sub vcl_error {
    set obj.http.Content-Type = "text/html; charset=utf-8";

    C{
        #include <stdio.h>
        #include <string.h>

        FILE * pFile;
        char content [100];
        char page [10240];
        char fname [50];

        page[0] = '\0';
        sprintf(fname, "/var/www/error/index.html", VRT_r_obj_status(sp));

        pFile = fopen(fname, "r");
        while (fgets(content, 100, pFile)) {
            strcat(page, content);
        }
        fclose(pFile);
        VRT_synth_page(sp, 0, page, "<!-- XID: ", VRT_r_req_xid(sp), " -->", vrt_magic_string_end);

        return (deliver);
    }C
}
...