清漆 504 网关超时
varnish 504 gateway timeout
我在 NY2 地区的数字海洋中有 2 台 varnish 服务器。我有两个网络服务器位于 Amazon EC2 us-east-1b。
Varnish 是 3.05 版,而 Web 服务器上的 apache 运行 是 2.4.6 版。我发现,在正常加载页面之前,加载的每个页面都会出现“504 网关超时”错误。有时,如果您第二次点击该页面,它会再次出现超时错误。
这是一个烦人的错误,我想尝试更正。我尝试通过在清漆配置中将超时设置为非常高来解决这个问题。这阻止了我收到的 503 错误,但现在 504 错误是主要问题。
我有一个非常简单的清漆 VCL 文件。这是:
backend web1 {
.host = "10.10.10.25";
.port = "80";
.connect_timeout = 1200s;
.first_byte_timeout = 1200s;
.between_bytes_timeout = 1200s;
.max_connections = 70;
.probe = {
.request =
"GET /healthcheck.php HTTP/1.1"
"Host: wiki.example.com"
"Connection: close";
.interval = 10m;
.timeout = 60s;
.window = 3;
.threshold = 2;
}
}
backend web2 {
.host = "10.10.10.26";
.port = "80";
.connect_timeout = 1200s;
.first_byte_timeout = 1200s;
.between_bytes_timeout = 1200s;
.max_connections = 70;
.probe = {
.request =
"GET /healthcheck.php HTTP/1.1"
"Host: wiki.example.com"
"Connection: close";
.interval = 10m;
.timeout = 60s;
.window = 3;
.threshold = 2;
}
}
director www round-robin {
{ .backend = web1; }
{ .backend = web2; }
}
sub vcl_recv {
if (req.url ~ "&action=submit($|/)") {
return (pass);
}
set req.backend = www;
return (lookup);
}
sub vcl_fetch {
set beresp.ttl = 3600s;
set beresp.grace = 4h;
return (deliver);
}
sub vcl_deliver {
if (obj.hits> 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}
这是当页面出现 504 错误时我在 varnish 日志中遇到的错误:
10 TxHeader c Age: 1
10 TxHeader c Via: 1.1 varnish
10 TxHeader c Connection: close
10 TxHeader c X-Cache: MISS
10 Debug c Write error, retval = -1, len = 75311, errno = Connection reset by peer
10 ReqEnd c 1481957120 1436230882.856483936 1436230941.208484650 0.000118494 58.351872206 0.000128508
10 StatSess c 54.88.194.254 52474 58 1 1 0 0 1 565 74746
我已经检查过我可以在发生这个错误后卷曲健康检查文件,似乎我可以:
[root@varnish1:/etc/varnish] #curl http://wiki.example.com/healthcheck.php
good
这是一个奇怪的设置,但在我们批准在 EC2 中设置清漆之前还需要几周时间。这是我继承的设置,需要尝试使其在接下来的几周内可用。
如果您能提供任何帮助和见解,我将不胜感激。
我认为你必须将 set req.backend = www;
语句移动到 vcl_recv 的第一行。
现在你返回 pass 但没有设置后端,所以我假设 Varnish 超时等待不存在的后端响应。
"errno = Connection reset by peer"
peer 正在重置连接。这不会发生在清漆中。去调试对等点。
我在 NY2 地区的数字海洋中有 2 台 varnish 服务器。我有两个网络服务器位于 Amazon EC2 us-east-1b。
Varnish 是 3.05 版,而 Web 服务器上的 apache 运行 是 2.4.6 版。我发现,在正常加载页面之前,加载的每个页面都会出现“504 网关超时”错误。有时,如果您第二次点击该页面,它会再次出现超时错误。
这是一个烦人的错误,我想尝试更正。我尝试通过在清漆配置中将超时设置为非常高来解决这个问题。这阻止了我收到的 503 错误,但现在 504 错误是主要问题。
我有一个非常简单的清漆 VCL 文件。这是:
backend web1 {
.host = "10.10.10.25";
.port = "80";
.connect_timeout = 1200s;
.first_byte_timeout = 1200s;
.between_bytes_timeout = 1200s;
.max_connections = 70;
.probe = {
.request =
"GET /healthcheck.php HTTP/1.1"
"Host: wiki.example.com"
"Connection: close";
.interval = 10m;
.timeout = 60s;
.window = 3;
.threshold = 2;
}
}
backend web2 {
.host = "10.10.10.26";
.port = "80";
.connect_timeout = 1200s;
.first_byte_timeout = 1200s;
.between_bytes_timeout = 1200s;
.max_connections = 70;
.probe = {
.request =
"GET /healthcheck.php HTTP/1.1"
"Host: wiki.example.com"
"Connection: close";
.interval = 10m;
.timeout = 60s;
.window = 3;
.threshold = 2;
}
}
director www round-robin {
{ .backend = web1; }
{ .backend = web2; }
}
sub vcl_recv {
if (req.url ~ "&action=submit($|/)") {
return (pass);
}
set req.backend = www;
return (lookup);
}
sub vcl_fetch {
set beresp.ttl = 3600s;
set beresp.grace = 4h;
return (deliver);
}
sub vcl_deliver {
if (obj.hits> 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}
这是当页面出现 504 错误时我在 varnish 日志中遇到的错误:
10 TxHeader c Age: 1
10 TxHeader c Via: 1.1 varnish
10 TxHeader c Connection: close
10 TxHeader c X-Cache: MISS
10 Debug c Write error, retval = -1, len = 75311, errno = Connection reset by peer
10 ReqEnd c 1481957120 1436230882.856483936 1436230941.208484650 0.000118494 58.351872206 0.000128508
10 StatSess c 54.88.194.254 52474 58 1 1 0 0 1 565 74746
我已经检查过我可以在发生这个错误后卷曲健康检查文件,似乎我可以:
[root@varnish1:/etc/varnish] #curl http://wiki.example.com/healthcheck.php
good
这是一个奇怪的设置,但在我们批准在 EC2 中设置清漆之前还需要几周时间。这是我继承的设置,需要尝试使其在接下来的几周内可用。
如果您能提供任何帮助和见解,我将不胜感激。
我认为你必须将 set req.backend = www;
语句移动到 vcl_recv 的第一行。
现在你返回 pass 但没有设置后端,所以我假设 Varnish 超时等待不存在的后端响应。
"errno = Connection reset by peer"
peer 正在重置连接。这不会发生在清漆中。去调试对等点。