誰かが同様の問題を経験しました、私はVarnish(v3、Debian 6にDrupal 7)をインストールしました、そしてVarnish Drupalモジュール、設定された設定phpおよびvcl、そしてログインしたユーザーが時々「ログアウト」されることを除いて、すべてが正常に機能しているように見えます。つまり、ユーザーがリンクをクリックすると、キャッシュされたVarnishページ(HIT)にリダイレクトされます。MISSのページでは、すべてが正常です。
ログインしたユーザーがキャッシュされたページにアクセスしないように強制して、ログアウトする方法を教えてください。
Vclファイルとconfigファイルのセットアップ方法をいくつかのチュートリアル/設定に従って行ったので、管理ページはうまく機能しており、そのような動作を決して表現していません。
ありがとう!
手遅れかもしれませんが、私はまったく同じ問題を抱えていました。何が問題かを探すために2日間費やし、それから settings.php を読みました:
「Vary:Cookie」がないと、認証されたユーザーにもキャッシュから匿名ページが提供されます。
だから'ommit_vary_cookies'
TRUE
からFALSE
までsettings.php
問題を解決しました。
$conf['omit_vary_cookie'] = FALSE;
このルールはdefault.vclで使用する必要があります
# Remove all cookies that Drupal doesn't need to know about. ANY remaining
# cookie will cause the request to pass-through to a backend. For the most part
# we always set the NO_CACHE cookie after any POST request, disabling the
# Varnish cache temporarily. The session cookie allows all authenticated users
# to pass through as long as they're logged in.
#
# 1. Append a semi-colon to the front of the cookie string.
# 2. Remove all spaces that appear after semi-colons.
# 3. Match the cookies we want to keep, adding the space we removed
# previously, back. (\1) is first matching group in the regsuball.
# 4. Remove all other cookies, identifying them by the fact that they have
# no space after the preceding semi-colon.
# 5. Remove all spaces and semi-colons from the beginning and end of the
# cookie string.
if (req.http.Cookie) {
set req.http.Cookie = ";" + req.http.Cookie;
set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";");
set req.http.Cookie = regsuball(req.http.Cookie, ";(S{1,2}ESS[a-z0-9]+|NO_CACHE)=", "; \1=");
set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", "");
set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", "");
if (req.http.Cookie == "") {
# If there are no remaining cookies, remove the cookie header. If there
# aren't any cookie headers, Varnish's default behavior will be to cache
# the page.
unset req.http.Cookie;
}
else {
# If there is any cookies left (a session or NO_CACHE cookie), do not
# cache the page. Pass it on to Apache directly.
return (pass);
}
}