Диапазон папок регулярного выражения лака
Я строю обратный прокси Varnish, который будет балансировать между 2 серверами с разными файлами. Сервер 1 содержит 500 папок в диапазоне от 000 до 499. Сервер 2 имеет 500 папок в диапазоне от 500 до 999.
Senario точно такой же, как и диапазон папок регулярных выражений Squid
Я борюсь с регулярным выражением, так как мы можем получить 500 - 999, но не 000 - 499
Мой файл конфигурации выглядит следующим образом для Varnish 3.0.2, который в настоящее время идет в папку 500 - 999 без проблем во втором блоке, но ничего в первом блоке.
# access control list for "purge": open to only localhost and other local nodes
acl purge {
"localhost";
}
backend default {
.host = "localhost";
.port = "80";
}
backend images02 {
.host = "images02.test.local";
.port = "80";
.probe = { .url = "/server_status.php"; .interval = 5s; .timeout = 1s; .window = 5;.threshold = 3; }
}
backend images03 {
.host = "images03.test.local";
.port = "80";
.probe = { .url = "/server_status.php"; .interval = 5s; .timeout = 1s; .window = 5;.threshold = 3; }
}
sub vcl_recv {
# Serve objects up to 2 minutes past their expiry if the backend
# is slow to respond.
set req.grace = 120s;
# This uses the ACL action called "purge". Basically if a request to
# PURGE the cache comes from anywhere other than localhost, ignore it.
if (req.request == "PURGE")
{if (!client.ip ~ purge)
{error 405 "Not allowed.";}
return(lookup);}
if (req.http.host ~ "[0-4]{1}[0-9]{1}[0-9]{1}" )
{ set req.backend = images02; }
else
{ set req.backend = images03; }
return(lookup);
}
1 ответ
Вы соответствуете req.http.host, который является именем хоста вашего запроса. Я предполагаю, что вы хотите сопоставить имена файлов в URL.
Если URL-адрес вашего файла будет выглядеть как "/files/012/filename.ext", вы можете сопоставить его со следующим VCL:
if ( req.url ~ "^/files/[0-4][0-9][0-9]/" ) {
set req.backend = images02;
}
else {
set req.backend = images03;
}