ログインユーザーにもcacheを効かせたいときがある.
その時はjwt tokenの値を利用してcacheを作れば良い.
jwt tokenの名前を jwt_token
しよう.
まずjwt tokenから値を抜き出す.
sub vcl_recv {
if (req.http.Cookie ~ "jwt_token=.*") {
set req.http.X-TOKEN = regsub(re.group.0, "\;.*", "");
}
}
次にcacheのkeyとなるhashを生成する.
sub vcl_hash {
if (req.http.X-TOKEN) {
set req.hash += req.http.X-TOKEN;
}
set req.hash += req.url;
}
これでjwt tokenを利用してcacheが作られます.
ちなみにログインのたびにjwt tokenは変わるのでログインごとにcacheが破棄されるような挙動になる.