WordPressでのnginxの/wp-admin/の設定

シェアする

nginxでキャッシュを利用しているんですが、どうもこのキャッシュが管理画面回りで悪さする・・・というのがやっと解決しました。

WordPressでのnginxの/wp-admin/の設定

WordPressは高機能ですが重装備なCMSなのでレスポンス対策のためにキャッシュを入れる、というのは1つの定番手段です。
プラグインでキャッシュするのもありますが、これはこれで過去いろんなキャッシュプラグインがセキュリティ的に問題を起こしたりしています。
できるのであればサーバ側でキャッシュするのがベストなので、僕はhttpサーバをnginxにしています。

一応前提としてキャッシュ導入が必要な理由をおさらいしておきますが、Wordpressは高機能ですが、1ページ出力するのにいろんな関連ファイルを読み込んだり、DB接続をしまくったりしています。
管理者側からすると記事の人気順をメニューに出せたり、検索機能が提供できたりと便利なことずくめなんですが、見に来る人からすればそんなことは知ったことではなくて、それよりもさっさとページが出てほしいわけです。
Googleもユーザ側の視点からサイトの評価に読み込み速度を指標として入れています。

こういうのを提供して読み込み速度のアップ=UXの向上を促進しているわけですね。
これがキャッシュを使う理由。

キャッシュが効きすぎるのも考え物

とはいえ、サーバサイドでキャッシュを効かせる場合1つ注意が必要で、ユーザ側で見るところはキャッシュを随意に効かせておいて、投稿編集画面など管理画面は極力キャッシュを効かせないようにしないといけないわけです。
これがいままでうまくいってなくて・・・
新規投稿をする時にちゃんとリロードして管理画面をリフレッシュしないと、最悪その前に書いた原稿を新規投稿で上書き、というかなーり下がる現象が時折起こっていました。

nginxの管理画面回りの設定例は色々Webに上がっているんですが、管理画面のCookieを見たりとか色々やってるものがありながら、今一つここのキャッシュのコントロールは出来てないものが多かった気がします。
で、色々調べた結果、とりあえず投稿上書きがされない設定になったかな、と思える設定は以下。

    location /wp-admin/ {
        auth_basic "Restricted";
        auth_basic_user_file /***/htpasswd;
        expires -1 ;
        add_header Cache-Control no-cache;
    }

何のことはない、expiresを-1にして、add_headerで明示的にキャッシュコントロールするだけなんですが・・・。
指定は/wp-admin/だけで大丈夫だと思います。
あと上の2行は管理画面URLはそもそも狙われやすいので、BASIC認証でもなんでも入れといたほうがいいよ、という内容です。
キッズが見に来ちゃう、とかより、自動でアタックされるのがこれでだいぶん減ります。

この記事が気に入ったら
いいね!お願いします