ログインユーザーにも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が破棄されるような挙動になる.