Лак изменения 4 503 ошибки

Как я могу изменить лак 503 ошибки?
Как я могу настроить его?
я использую v 4 лака

это - теперь работа

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>Under Maintenance</title>
  </head>
  <body>
    <h1>Under Maintenance</h1>
    <p></p>
    <hr>
  </body>
</html>
"} );
    return (deliver);
}
7
задан 3 February 2015 в 16:53
2 ответа

В Varnish 4 есть два типа ошибок. Одна из них - это ошибки выборки сервером. vcl_backend_error обрабатывает такие ошибки. Другой - это ошибки, генерируемые в VCL. vcl_synth обрабатывает такие ошибки.

В вашем случае вы настраиваете подпрограмму vcl_error , которая не предназначена для обработки ошибок серверной части.

Вы можете различать эти два вида ошибок ошибки из следующего default.vcl.

vcl 4.0;

backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

sub vcl_recv {
    if (req.url ~ "^/404") {
        return (synth(999, "make 404 error explicitly"));
    }
}

sub vcl_backend_response {
}

sub vcl_deliver {
}

sub vcl_backend_error {
    set beresp.http.Content-Type = "text/html; charset=utf-8";
    synthetic( {"errors due to backend fetch"} );
    return (deliver);
}

sub vcl_synth {
    if (resp.status == 999) {
        set resp.status = 404;
        set resp.http.Content-Type = "text/plain; charset=utf-8";
        synthetic({"errors due to vcl"});
        return (deliver);
    }
    return (deliver);
}

Подтверждение сообщений об ошибках

$ curl http://localhost:6081/   # If the backend server is not running, "503 Backend fetch failed" error occurs 
errors due to backend fetch
$ curl http://localhost:6081/404/foo
errors due to vcl
4
ответ дан 2 December 2019 в 23:21

Я хотел бы предложить альтернативу ... пожалуйста, найдите ниже образец файла default.vcl

vcl 4.0;

import std;

backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

sub vcl_backend_response {
       if (beresp.status == 503 && bereq.retries < 5 ) {
       return(retry);
 }
}

sub vcl_backend_error {
      if (beresp.status == 503 && bereq.retries == 5) {
          synthetic(std.fileread("/etc/varnish/error503.html"));
          return(deliver);
       }
 }

sub vcl_synth {
    if (resp.status == 503) {
        synthetic(std.fileread("/etc/varnish/error503.html"));
        return(deliver);
     }
}

sub vcl_deliver {
    if (resp.status == 503) {
        return(restart);
    }
  }

А затем вы можете сохранить свой собственный HTML-код в error503.html

11
ответ дан 2 December 2019 в 23:21

Теги

Похожие вопросы