web-dev-qa-db-ja.com

ログイン後にブラウザにキャッシュされたページがコンテンツエディタに表示されないように、Drupal / Varnishのキャッシュを設定するにはどうすればよいですか?

私たちのキャッシングソリューションで少し状況が進んでいるので、いくつかの入力を希望します。

HAProxy-> Varnish-> Apacheのソリューションを使用します。 HAProxyはSSLを終了し、それをVarnishに送信してから、必要に応じてApacheに要求します。

Drupal 7、パージ、およびキャッシュの有効期限を使用しています。キャッシュの有効期限は、外部の有効期限を使用するように設定され、baseurlsが含まれています。サイトの[最小キャッシュライフタイム]は[なし]と[なし]に設定されています「キャッシュされたページの有効期限」は「6h」に設定されています。

Varnishキャッシュには常にキャッシュされたページの正しいバージョンがあり、それらは正しく期限切れになります。

匿名ユーザーがnode/123などのページにアクセスし、ログインしてから同じページに戻った場合でも、ブラウザーはキャッシュされたバージョンのページを提供します。これは、Drupalからの予想される動作です。これは、匿名ユーザーの場合、ページがキャッシュされたままであることを期待しているためです。

コンテンツエディターは、ページ(F5)を再読み込みし、「エラー」があると考えます。これは、ページの期待される認証済みバージョンを表示するためにこれを実行する必要があるためです。

本番インスタンスでの編集を許可する他の管理者は、この問題にどのように取り組みますか?

Varnishで発生するキャッシュの有効期間を短くするというアイデアをいじってみましたが、それはバンドエイドのように感じます(30秒キャッシュvs 6時間)。私はまた、Varnishから出てくるキャッシュヘッダーを削除するというアイデアをもてあそびましたが、Varnishがその存続期間にわたってキャッシュを保持できるようにしました。

可能であれば、サーバーの負荷を抑えるために応答をキャッシュできるようにしたいと思います。

前もって感謝します!

1
dasginganinja

プロキシがキャッシュ可能なページの次のヘッダーを送信するようにして、これを解決しました。

_Cache-Control: public, max-age=0_

私が経験していた動作は、page_cache_maximum_ageが設定されていたためでした。実際には、それがクライアントに送信されることを望んでおらず、自分のキャッシュサーバーのみがそうでした。

sub vcl_backend_response() { if (not static content && !beresp.uncacheable) { unset beresp.http.Cache-Control; set beresp.http.Cache-Control = "public, max-age=0"; } }

0
dasginganinja

この質問の回答を参照してください: https://drupal.stackexchange.com/a/117984/3279

D6ワニスモジュールの使用例は次のとおりです。 https://www.drupal.org/node/73842

したがって、hook_form_alter D7のカスタムphpモジュールで、追加の送信ハンドラーをノードに追加し、基本的にD7の同等のコードを呼び出して、問題の1ノードパスパス/エイリアスのワニスキャッシュをクリアします。

0
tenken