Varnish 4.0.3 を使用したいです。
そして、Cookie が特定のキーと値を持つかどうかのキャッシング プロセスを分割したいと考えています。
ユーザーがマイページにアクセスしたときに、ブラウザに「loged_in=true」Cookie がある場合、ページをキャッシュしたくありません。また、Cookie がない場合は、マイページをキャッシュしたいと考えています。
しかし、両方の設定が機能していません。
まったくキャッシュされません。
さらに、ユーザーが「カテゴリ」ページにアクセスすると、ワニスはページを正しくキャッシュします。
これが私の default.vcl です。
誰か私に何が悪いのか教えてくれますか?
vcl 4.0;
import directors;
backend ap1 {
.host = "192.168.0.1";
.port = "80";
.first_byte_timeout = 200s;
.probe = {
.url = "/";
.interval = 5s;
.timeout = 1 s;
.window = 5;
.threshold = 3;
.initial = 1;
}
}
backend ap2 {
.host = "192.168.0.2";
.port = "80";
.first_byte_timeout = 200s;
.probe = {
.url = "/";
.interval = 5s;
.timeout = 1 s;
.window = 5;
.threshold = 3;
.initial = 1;
}
}
sub vcl_init{
new ws_hash = directors.hash();
ws_hash.add_backend(ap1, 1.0);
ws_hash.add_backend(ap2, 1.0);
new ws_rand = directors.random();
ws_rand.add_backend(ap1, 1.0);
ws_rand.add_backend(ap2, 1.0);
}
sub vcl_recv{
if( (req.url ~ "(category)") ) {
// Cache
set req.backend_hint = ws_hash.backend(req.url + ":" + req.http.host);
return(hash);
}
if( (req.url ~ "(mypage)") ) {
if (req.http.Cookie ~ "(loged_in=true)" ) {
// NO Cache
set req.backend_hint = ws_rand.backend();
return(pass);
}
// Cache
set req.backend_hint = ws_hash.backend(req.url + ":" + req.http.host);
return(hash);
}
// NO Cache
set req.backend_hint = ws_rand.backend();
return(pass);
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.V-Cache = "HIT";
} else {
set resp.http.V-Cache = "MISS";
}
}