これメモってた気がするんだけど、検索してもひっかからなかったし
だいぶ更新放置しているので久々に書く。
同一URLでもアプリケーションによってPC/スマートフォン/ガラケー などでコンテンツを変えている場合、それぞれ場合分けごとにキャッシュをしないといけない。
vcl_hashのdefaultはこれ
sub vcl_hash { hash_data(req.url); if (req.http.host) { hash_data(req.http.host); } else { hash_data(server.ip); } return (hash); }
ここで単純にhash_data(req.http.User-Agent); を追加してしまうと大量のuser-agentごとにキャッシュするのでだいぶ効率が悪い。公式のドキュメントの通り、新規の変数(X-UA-Device) を作って、user-agentごとにグループ分けをして、その変数をhash_dataに追加する。
vcl_recv { if (req.http.User-Agent ~ "(?i)(iPhone|Android)") { set req.http.X-UA-Device = "sp"; } else if (req.http.User-Agent ~ "(?i)(docomo|kddi|up\.browser|j-phone|softbank|vodafone|mot-)") { set req.http.X-UA-Device = "mobile"; } else { set req.http.X-UA-Device = "pc"; } # 略 } sub vcl_hash { hash_data(req.url); ## これ追加 hash_data(req.http.X-UA-Device); if (req.http.host) { hash_data(req.http.host); } else { hash_data(server.ip); } return (hash); }