WordPressでnginxのプロキシキャッシュが効かない問題が解決
※本ページはプロモーションが含まれています
新しいブログを立ち上げるために新しいサーバの設定をしています。
その際にnginxのプロキシキャッシュが効かなく(キャッシュファイルが作成されない)悩んでいました。
いろいろ試してみると、ブラウザによってキャッシュが効いたり効かなかったりすることが判明。
更に調べてみるとなんとか解決できたので紹介します。
キャッシュが効かない理由
nginxではresponse headerに「Cache-Control:no-cache」の様な特定の条件の値がある場合はキャッシュを使わず普通に処理してしまう。(HttpProxyModule – Nginx Community)
WordPressファイルの中にある「admin-ajax.php」が「nocache_headers()」を呼び出して「response header」に「Cache-Control:no-cache」を追加していたことが原因のようだ。
特定のブラウザでキャッシュが効かないのは、WordPressにログインした状態でブログにアクセスすると「admin-ajax.php」が呼び出されてキャッシュが効かない状態になっていたからだった。
なのでブラウザに原因があるのではなく、WordPressにログインしているかしていないかの問題だった。
「HttpProxyModule – Nginx Community」によると、プロキシキャッシュの設定に
proxy_ignore_headers X-Accel-Redirect X-Accel-Expires Cache-Control Expires Set-Cookie;
を追加すれば値に関係なくキャッシュしてくれるようだが僕の環境ではうまくいかなかった。
おわりに
エラーが出ていたわけではないので原因の見当がつかず、かなりの時間を使ってしまいました。
ブラウザの設定でキャッシュが効かなくなるのは困ると思い、必死で探しましたが、WordPressにログインできる自分だけの問題だったのでひとまずホッとしました。
ここまで突き詰めるのに満身創痍のためこれ以上の原因は追求しませんが、お分かりの方がいらしたら教えていただけると有難いです。