Varnish HTTP 503 - 后端异常 - 未缓存 Apache 静态文件

Varnish HTTP 503 - backend sick - apache static files not cached

我们有如下配置的varnish:


    backend default {
        .host = "127.0.0.1";
        .port = "80";
        .max_connections = 300;

        .probe = {
            .url = "/webapp-context/healthcheck";
            .interval  = 60s;
            .timeout   = 20s;
            .window    = 5;
            .threshold = 3;
        }

        .first_byte_timeout     = 5s;
        .connect_timeout        = 5s;
        .between_bytes_timeout  = 1s;
    }

    sub vcl_recv {

        // do not cache static files
        if ( req.url ~ "^(/staticfiles)" ) {
            return(pass);
        }



        // create cache
        if ( req.url ~ "^(/content/)" ) {
            unset req.http.Cookie;
            return(hash);
        }

        ...
        ...
    }

所以,我的问题是:我们已将 varnish 配置为对静态文件上下文执行 "pass"。现在,当我们的后端在探测验证后出现问题时,所有静态文件上下文都会出现 HTTP 503 错误,但是 html 页面在 Varnish 缓存上仍然正常,但没有静态文件。

是否有任何方法可以配置 Varnish 以继续为来自 Apache 的所有静态文件提供服务,即使应用程序服务器已关闭?

您可以设置其他 后端定义,不指定运行状况检查。所以你的 VCL 将包含这样的东西:

backend static {
    .host = "127.0.0.1";
    .port = "80";
    .max_connections = 300;
}

# .. your default backend with probe here

sub vcl_recv {
    # ...
    // do not cache static files
    if ( req.url ~ "^(/staticfiles)" ) {
        set req.backend_hint = static;
        return(pass);
    }
    # ,,,
}