Varnish 3 を使用しており、サイトはワードプレス上にあります。問題は、すべての Cookie と set-cookie ヘッダーを削除すると、ニスが適切にキャッシュされることです。ただし、Cookie に応じてページをキャッシュするには、ワニスを作成する必要があります。(私のサイトのコンテンツは地理位置情報に依存するため、ユーザーが初めてログインするときに、cookie 'detected_country' を追加します) まず、set-cookies ヘッダーをすべて削除します。
# Drop any cookies Wordpress tries to send back to the client.
sub vcl_fetch {
if (!(req.url ~ "wp-(login|admin)")) {
unset beresp.http.set-cookie;
}
}
次に: デフォルトでは、varnish は Cookie を持つリクエストをキャッシュしません。これは、デフォルトの vcl_fetch ロジックで行われます。そこで、デフォルトの vcl_fetch を変更し、Cookie 禁止をコメントアウトしました (「参考文献」を参照/*|| req.http.Cookie*/
):
sub vcl_recv {
if (req.restarts == 0) {
if (req.http.x-forwarded-for) {
set req.http.X-Forwarded-For =
req.http.X-Forwarded-For + ", " + client.ip;
} else {
set req.http.X-Forwarded-For = client.ip;
}
}
if (req.request != "GET" &&
req.request != "HEAD" &&
req.request != "PUT" &&
req.request != "POST" &&
req.request != "TRACE" &&
req.request != "OPTIONS" &&
req.request != "DELETE") {
/* Non-RFC2616 or CONNECT which is weird. */
return (pipe);
}
if (req.request != "GET" && req.request != "HEAD") {
/* We only deal with GET and HEAD by default */
return (pass);
}
if (req.http.Authorization /*|| req.http.Cookie*/) {
/* Not cacheable by default */
return (pass);
}
return (lookup);
}
その後、ニスが Cookie を含むページをキャッシュすることを期待していましたが、そうではありません :-( しかし、キャッシュする必要があります! そうではありませんか?
すべての Cookie を削除すると、問題なくキャッシュされます。
sub vcl_recv {
if (!(req.url ~ "wp-(login|admin)")) {
remove req.http.Cookie;
}
}
助けてください!キャッシュしない理由を見つけるのに多くの時間を費やしました