WordPressでNginxのキャッシュを消すプラグインが動かない人向け

2020年5月8日WordPressNginx,WordPress,キャッシュ,プラグイン,リバースプロキシ

WordPressをリバースプロキシ下で運用している方は多いと思いますが

記事を投稿したりコメントを頂いた際、自動で該当のキャッシュを消してくれる便利なプラグインは手放せません。

WordPressのアクションフックを調べて自分で書けば良いと言えば良いのですが、あるものを使った方がだいぶ楽ちんですから。

と言うわけで私もWordPressをリバースプロキシ下に移してキャッシュさせてみた訳ですが、、、

動かないンゴ( ^ω^)・・・

そんなわけでちょっと見てみると、キャッシュファイルの類はnginxのワーカープロセスのユーザーで作成される様子。

user nginx;

こう書いてあると

# ls -la /var/cache/nginx
合計 20
drwx------  18 nginx root   134  7月 15 22:47 .
drwxr-xr-x.  9 root  root    97  7月 15 21:24 ..
drwx------  21 nginx nginx 4096  7月 19 17:35 0
drwx------  21 nginx nginx 4096  7月 19 17:28 1
drwx------  10 nginx nginx   78  7月 17 08:47 2
drwx------  21 nginx nginx 4096  7月 19 17:35 3
drwx------  14 nginx nginx  114  7月 19 17:35 4
drwx------  18 nginx nginx  150  7月 19 17:35 5
drwx------  21 nginx nginx 4096  7月 19 15:03 6
drwx------  19 nginx nginx 4096  7月 19 15:23 7
drwx------  14 nginx nginx  114  7月 19 17:35 8
drwx------  12 nginx nginx   96  7月 19 17:28 9
drwx------  16 nginx nginx  132  7月 19 17:35 a
drwx------  13 nginx nginx  105  7月 18 21:30 b
drwx------  13 nginx nginx  105  7月 19 17:35 c
drwx------  15 nginx nginx  123  7月 19 17:35 d
drwx------  17 nginx nginx  141  7月 19 17:35 e
drwx------  18 nginx nginx  150  7月 19 17:35 f

こうなってしまう。ズラっとnginx。

ユーザーディレクトリにDocumentRootなんかがあって、PHP-FPM等で実行ユーザーを設定してやってると、このワーカープロセスが作ったnginxキャッシュが操作出来ない。

かといってnginxはワーカープロセスやらキャッシュマネージャープロセスに対し、個別のサーバー(ヴァーチャルホストなど)毎に実行ユーザーを設定出来ないので、、、

前述の「user nginx;」としちゃってるユーザーでキャッシュが作られてしまう。

しかもパーミッションが700。

オーナーでないと見る事も消す事も出来ませぬ。

ユーザーディレクトリにあるDocumentRootはそのユーザーの権限で完結させたい所だけれど、、

せめてグループで操作出来る様にならないかと色々と調べて見ても良い方法が見つからず。

仕方なくユーザーディレクトリにあるDocumentRoot以下のアクセス権限を、PHP-FPMのユーザー含め、すべてワーカープロセスのユーザーで行える様に揃えてしまうと、前述のキャッシュ削除プラグインがちゃんと動いてくれた。

要するにキモは

nginxのキャッシュ系ファイルはワーカープロセスで設定したユーザーで作られ、しかもパーミッションが700で固定という業突く張りだったという事でした。

WordPressのキャッシュ自動削除系プラグインが動かない人は、この辺りもチェックしてみてください。

さて、WordPress用のグループパーミッションの設定とか面倒過ぎてやりたくないのでこんな大雑把な感じに。

するともうDocumentRootがユーザーディレクトリにある意味すら失われ( ^ω^)・・・

まぁなんか、nginxでヴァーチャルホストいっぱい作ってPHP-FPMしてリバースプロキシ置いて、みたいな事をやる人はもう全部rootでもいいっちゃいいのですけど。

誰か複数人でメンテする場合やらは、ステージング環境でも作ってデプロイの仕組みでも置いてやれって事ですか。

若しくはキャッシュ削除系プラグインをフックしてsudoersでやるか。

後々の管理を考えると、どれも非常にめんどくさいですね。

nginxのキャッシュファイル生成時のパーミッションが変えられたら一番楽ちんなんですけれど

誰かご存知ないですかね