Я просто видел, что TechNet имеет обновленную Книгу доступную для скачивания.
Хорошо, в конце мне удалось решить это использование следующего vcl файла. Обратите внимание, что я добавил несколько дополнительных битов для разрешения изящества истечения кэша, когда бэкенд умер.
Кажется, что мой основной отказ использовал unset req.http.Set-Cookie;
когда я должен был использовать unset obj.http.Set-Cookie;
в vcl_fetch
раздел. (obj
в vcl_fetch и req
в разделе vcl_recv).
director rails_director round-robin {
{
.backend = {
.host = "xxx.xxx.xxx.xxx";
.port = "http";
.probe = {
.url = "/lbcheck/lbuptest";
.timeout = 0.3 s;
.window = 8;
.threshold = 3;
}
}
}
}
sub vcl_recv {
if (req.backend.healthy) {
set req.grace = 30s;
} else {
set req.grace = 1h;
}
if (req.url ~ "^/login") {
pipe;
}
if (req.url ~ "^/sessions") {
pipe;
}
if (req.url ~ "\.(css|js|jpg|jpeg|gif|ico|png)\??\d*$") {
unset req.http.cookie;
lookup;
} else {
if (req.http.cookie ~ "user_credentials") {
pipe;
} else {
unset req.http.cookie;
}
}
# Only cache GET and HEAD requests
if (req.request != "GET" && req.request != "HEAD") {
pipe;
}
}
sub vcl_fetch {
set obj.grace = 1h;
if (req.url ~ "^/login") {
pass;
}
if (req.url ~ "^/sessions") {
pass;
}
if (req.http.cookie ~ "user_credentials") {
pass;
} else {
unset obj.http.Set-Cookie;
}
# cache CSS and JS files
if (req.url ~ "\.(css|js|jpg|jpeg|gif|ico|png)\??\d*$") {
unset obj.http.Set-Cookie;
}
if (obj.status >=400 && obj.status <500) {
error 404 "File not found";
}
if (obj.status >=500 && obj.status <600) {
error 503 "File is Temporarily Unavailable";
}
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}
Я не могу прокомментировать, таким образом, я отправляю это как ответ.
Внимание: С 2.1.0, obj.* назван beresp.* в vcl_fetch и obj.* теперь только для чтения.
Они также кажутся лучше помещенный в vcl_recv вместо vcl_fetch:
if (req.url ~ "^/login") {
pipe;
}
if (req.url ~ "^/sessions") {
pipe;
}
Наконец, в Вас определение бэкенда, добавил бы я
.max_connections = 32;
Корректируйтесь к количеству пассажирских бэкендов, которые Вы позволили nginx/apache создавать. Если Вы не устанавливаете этот предел, необходимо следить за Вами пассажирская глобальная очередь (предполагающий использование пассажира).