1

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;
    }
}

助けてください!キャッシュしない理由を見つけるのに多くの時間を費やしました

4

1 に答える 1