Varnish HTTP 503 - 后端生病 - 未缓存的apache静态文件

时间:2017-07-25 13:29:52

标签: apache caching varnish

我们的清漆配置如下:

  • 我们使用apache主机和端口进行探测验证,但是使用上下文到后端(应用服务器/ mod jk)。
  • 我们没有使用群集和负载平衡配置。

    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;
    }

  • 我们只为特定的上下文设置了清漆缓存
  • 我们没有静态文件的清漆缓存(www.domain.com/staticfiles/*),因为所有静态文件都在DocumentRoot(Apache)上。
    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);
        }

        ...
        ...
    }

所以,我的问题是:我们已经配置了清漆来做"传递"对于静态文件上下文。现在,当我们的后端在探测验证后生病时,所有静态文件上下文都会出现HTTP 503错误,但是在Varnish缓存上html页面仍然可以,但没有静态文件。

有没有办法配置Varnish来保持从Apache提供所有静态文件,即使应用程序服务器已关闭?

1 个答案:

答案 0 :(得分:1)

您可以设置其他后端定义,该定义不会指定运行状况检查。所以你的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);
    }
    # ,,,
}