Varnish HTTP 503 - 后端异常 - 未缓存 Apache 静态文件
Varnish HTTP 503 - backend sick - apache static files not cached
我们有如下配置的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);
}
...
...
}
所以,我的问题是:我们已将 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);
}
# ,,,
}
我们有如下配置的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); } ... ... }
所以,我的问题是:我们已将 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);
}
# ,,,
}