サポート » 使い方全般 » 会員サイトにおけるキャッシュの取り扱いについて

  • 解決済 吉田 丈治

    (@geeorgey)


    nginx php-fpm mysql
    マルチサイトで会員サイトを運用しています。

    キャッシュプラグインは全部はずしてnginxのproxy_cacheのみで運用しています。
    課題があるのがブラウザキャッシュでして、ログイン後にも関わらずブラウザキャッシュでログイン前のページが表示されてしまう事がままあります。(nginxのconfでproxy_cacheはログイン後は表示させなくしているのですが、うまくいっていません)

    ログイン後に強制的にURLにパラメータ付与してアクセスさせれば良いのかなとも思ったのですが、何か他に方法が無いかなと思い書き込ませていただきました。
    どなたか御知恵をいただけないでしょうか。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • ログインユーザーに返っている HTML が非ログインユーザー用のものということでしたら、ブラウザキャッシュではないと思いますがどうでしょうか?

    また、コメントなどキャッシュしてはいけないものがキャッシュされてしまうということを防いだりといろいろやってくれるプラグインがあるので、こちらも参照してください。
    https://ja.wordpress.org/plugins/nginx-champuru/

    僕の環境の設定ファイルは以下のようになっていました。
    ファイル全体は
    https://github.com/megumiteam/chef-amimoto
    などにあると思います。

    server {
        listen      80;
        server_name example.cc;
    
    	(中略)
    
        set $do_not_cache 0;
        if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
            set $do_not_cache 1;
        }
        if ($request_method = POST) {
            set $do_not_cache 1;
        }
    
    	(中略)
    
        location @wordpress {
            internal;
    
            proxy_no_cache     $do_not_cache;
            proxy_cache_bypass $do_not_cache;
    
            proxy_redirect     off;
            proxy_cache        czone;
            proxy_cache_key    "$scheme://$host$request_uri$mobile";
            proxy_cache_valid  200 0m;
            proxy_pass http://backend;
        }
    
    	(中略)
    
    }
    スレッド開始 吉田 丈治

    (@geeorgey)

    Shinichi Nishikawaさん

    ありがとうございます。
    既にNginx Cache Controllerは使っています。

    確かに、ブラウザキャッシュではないですね。
    ログインしているのに、ログインしていない状態のキャッシュ(proxy cache)が返ってくる感じです。
    (プロキシキャッシュ削除すると、管理バーが現れます)

    confファイルありがとうございます。試してみたいと思います。

    (元々W3 Total Cacheを使っていたのですが、この件があってWP Super Cacheに切り替えてみたところ、大丈夫になった気がするので現在は様子を見ています)

    Nginx Proxy キャッシュと WP Super Cache などのうち、ページの生成結果をキャッシュする機能とは、機能がかぶっており、併用はしない方がよいと思います。

    Hinaloe

    (@hnle)

    proxyのキャッシュがってことは$do_not_cacheがセットされていないか、或いはproxy_cache_bypassになっていないか?

    あ、あくまでもAmimoto系の設定を参考に話してるので自身の設定ファイルと西川さんのと見比べてみてください:)

    スレッド開始 吉田 丈治

    (@geeorgey)

    Shinichi Nishikawaさん
    そうだったんですね。併用辞めました(WP Super Cache停止)
    Nginx環境ですと、特にキャッシュ系プラグインは使う必要無いでしょうか?

    Hinaloeさん
    同じくAmimoto系でしたので参考にさせていただきます。

    質問しておいて何なのですが…今やってみると何故か問題がなさそうです。
    以前サーバが劇的に重かった時期があり、その時に感じた課題だったもので、WPではない部分で何かが起きていたのかもしれません。お騒がせ致しました。

    Nginx環境ですと、特にキャッシュ系プラグインは使う必要無いでしょうか?

    というよりも、Nginx プロキシキャッシングサーバがやっていることというのは、

    • 一度アクセスがあると、そのページのキャッシュを作成する(HTMLを丸ごと保存しておく感じ)
    • 2回目以降のアクセスに対しては、そのページのキャッシュを返す(保存しておいたHTMLをブラウザに戻す。その際、WordPressは動きません)

    ということなのです。なので、WP Super Cacheのメインの機能と同じです。

    次に、ページをまるまるキャッシュするときに発生する問題が、

    • コメント欄にメールアドレスなどを入れた状態がキャッシュされることがある(他のユーザーに前のユーザーの個人情報が漏れる)
    • 予約投稿が動かないかもしれない(全ページがキャッシュされていたら困る)
    • ブログ記事を追加しても、更新されない(その記事もトップページも)
    • ちゃんと設定しないとログインユーザーにもキャッシュが表示される

    という事が起こります。
    Nginx Cache Controller プラグインが扱うのは上記にリストにしたうちのいつ、どのキャッシュをクリアするのか問題です。キャッシュをパージするルールや、手動でのパージなどですね。

    一方、コメントやログインユーザー向けのキャッシュ返答の有無は、以下の部分です。

    if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
            set $do_not_cache 1;
    }
6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「会員サイトにおけるキャッシュの取り扱いについて」には新たに返信することはできません。