我有这个 vcl varnish 配置文件,但是当我想从应用程序服务器中清除它时它会引发错误。有什么问题吗?
我有 5 个应用程序服务器,除了管理员和论坛之外的所有内容都被缓存,但是,当我从应用程序服务器中清除用户时,它会引发此错误:无法在 192.168.11.41:6082 上连接到 varnishadm;“连接被拒绝”
backend app01 {
.host = "app01.xxx.com";
.port = "80";
.connect_timeout = 0.7s;
.first_byte_timeout = 30s;
.between_bytes_timeout = 30s;
.probe = {
.url = "/";
.interval = 5s;
.timeout = 1s;
.window = 5;
.threshold = 3;
}
}
backend app02 {
.host = "app02.xxx.com";
.port = "80";
.connect_timeout = 0.7s;
.first_byte_timeout = 30s;
.between_bytes_timeout = 30s;
.probe = {
.url = "/";
.interval = 5s;
.timeout = 1s;
.window = 5;
.threshold = 3;
}
}
backend app03 {
.host = "app03.xxx.com";
.port = "80";
.connect_timeout = 0.7s;
.first_byte_timeout = 30s;
.between_bytes_timeout = 30s;
.probe = {
.url = "/";
.interval = 5s;
.timeout = 1s;
.window = 5;
.threshold = 3;
}
}
backend app04 {
.host = "app04.xxx.com";
.port = "80";
.connect_timeout = 0.7s;
.first_byte_timeout = 30s;
.between_bytes_timeout = 30s;
.probe = {
.url = "/";
.interval = 5s;
.timeout = 1s;
.window = 5;
.threshold = 3;
}
}
backend app05 {
.host = "app05.xxx.com";
.port = "80";
.connect_timeout = 0.7s;
.first_byte_timeout = 30s;
.between_bytes_timeout = 30s;
.probe = {
.url = "/";
.interval = 5s;
.timeout = 1s;
.window = 5;
.threshold = 3;
}
}
director app_director round-robin {
{ .backend = app01; }
{ .backend = app02; }
{ .backend = app03; }
{ .backend = app04; }
{ .backend = app05; }
}
#acl internal {
# "localhost";
# "127.0.0.1";
#}
acl purge {
"localhost";
"192.168.11.0"/24;
}
sub vcl_recv {
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
return (lookup);
}
# Normalize the host header
# --
if (req.http.Host ~ "(?i)^(www.)?xxx.com") {
set req.http.host = "www.xxx.com";
}
# Admin needs no cache
# --
if (req.http.Host ~ "(?i)^(admin.)?xxx.com") {
return (pass);
}
# Requests to /no-cache/ needs no cache
# --
if (req.request == "GET" && req.url ~ "^/no-cache/") {
return (pass);
}
if (req.request == "GET" && req.url ~ "^/rss/xxx/") {
return (pass);
}
# xx.xxx.com and xxx.com/foro/ needs no cache
# --
if (req.http.host == "xx.xxx.com" || (req.http.host == "www.xxx.com" && req.url ~ "^/foro/" && req.http.Cookie ~ "(?i)(cookieAdmin)") ) {
return (pass);
}
set req.backend = app_director;
# Use anonymous, cached pages if all backends are down.
if (! req.backend.healthy) {
unset req.http.Cookie;
set req.grace = 1h;
} else {
set req.grace = 30s;
}
# Add the X-Forwarded-For header
# --
if (req.restarts == 0) {
if (req.http.x-forwarded-for) {
set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;
} else {
set req.http.X-Forwarded-For = client.ip;
}
}
# Sanely handle the request based on the type
# --
if (req.request != "GET" &&
req.request != "HEAD" &&
req.request != "PUT" &&
req.request != "POST" &&
req.request != "TRACE" &&
req.request != "OPTIONS" &&
req.request != "DELETE") {
/* Non-RFC2616 or CONNECT which is weird. */
return (pipe);
}
# Not sure what could match here, but it's in the default.vcl
# --
if (req.request != "GET" && req.request != "HEAD") {
/* We only deal with GET and HEAD by default */
# PURGE
return (pass);
}
# Always cache the following file types for all users.
if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|flv|avi|mov|wmv|css|js|html|htm)(\?[a-z0-9]+)?$") {
unset req.http.Cookie;
return (lookup);
}
# Handle compression correctly. Different browsers send different
# "Accept-Encoding" headers, even though they mostly all support the same
# compression mechanisms. By consolidating these compression headers into
# a consistent format, we can reduce the size of the cache and get more hits.=
# @see: http:// varnish.projects.linpro.no/wiki/FAQ/Compression
if (req.http.Accept-Encoding) {
if (req.http.Accept-Encoding ~ "gzip") {
# If the browser supports it, we'll use gzip.
set req.http.Accept-Encoding = "gzip";
}
else if (req.http.Accept-Encoding ~ "deflate") {
# Next, try deflate if it is supported.
set req.http.Accept-Encoding = "deflate";
}
else {
# Unknown algorithm. Remove it and send unencoded.
unset req.http.Accept-Encoding;
}
}
# Cache all requests by default, overriding the standard Varnish behavior
if (req.request == "GET" || req.request == "HEAD") {
/* We only deal with GET and HEAD by default */
unset req.http.Cookie;
return (lookup);
}
# If there's a cookie left aft this point do not cache
# or is this easier to keep in the cookie deletion above?
# --
if (req.http.Authorization || req.http.Cookie) {
/* Not cacheable by default */
return (pass);
}
# If we get here, try the cache
# --
return (lookup);
}
sub vcl_pipe {
return (pipe);
}
sub vcl_pass {
return (pass);
}
sub vcl_hash {
# Include cookie in cache hash.
# This check is unnecessary because we already pass on all cookies.
#if (req.http.Cookie) {
# #set req.hash += req.http.Cookie;
# hash_data(req.http.Cookie);
#}
}
sub vcl_hit {
if (req.request == "PURGE") {
set obj.ttl = 0s;
error 200 "Purged";
}
}
sub vcl_miss {
if (req.request == "PURGE") {
error 404 "Not in cache";
}
}
sub vcl_fetch {
# remove all cookies
# unset beresp.http.set-cookie;
# cache for 12 hours
# set beresp.ttl = 2h;
# Don't allow static files to set cookies.
if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm)(\?[a-z0-9]+)?$") {
unset beresp.http.set-cookie;
set beresp.ttl = 12h;
} else {
unset beresp.http.set-cookie;
set beresp.ttl = 30m;
}
# If the backend server doesn't return properly, don't send another connection to it
# for 60s and try another backend via restart.
#
# https://www.varnish-cache.org/docs/trunk/tutorial/handling_misbehaving_servers.html
# --
if(beresp.status == 500) {
set beresp.saintmode = 5m;
if (req.request != "POST") {
return(restart);
} else {
error 500 "Failed";
}
}
# Allow items to be stale if needed.
set beresp.grace = 1h;
}
sub vcl_deliver {
# if (resp.http.magicmarker) {
# unset resp.http.magicmarker;
# set resp.http.age = "0";
# }
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
return (deliver);
}
# In the event of an error, show friendlier messages.
sub vcl_error {
# Otherwise redirect to the homepage, which will likely be in the cache.
set obj.http.Content-Type = "text/html; charset=utf-8";
synthetic {"
<html>
<head>
<title>Page Unavailable</title>
<style>
body { background: #303030; text-align: center; color: white; }
#page { border: 1px solid #CCC; width: 500px; margin: 100px auto 0; padding: 30px; background: #323232; }
a, a:link, a:visited { color: #CCC; }
.error { color: #222; }
</style>
</head>
<body onload="setTimeout(function() { window.location = '/' }, 5000)">
<div id="page">
<h1 class="title">Page Unavailable</h1>
<p>The page you requested is temporarily unavailable.</p>
<p>We're redirecting you to the <a href="/">homepage</a> in 5 seconds.</p>
<div class="error">(Error "} + obj.status + " " + obj.response + {")</div>
</div>
</body>
</html>
"};
return (deliver);
}
sub vcl_init {
return (ok);
}
sub vcl_fini {
return (ok);
}