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

2018年7月20日

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

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

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

 

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

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

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

こう書いてあると

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

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

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

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

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

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

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

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

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

 

要するにキモは

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

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

 

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

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

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

 

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

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

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

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

誰かご存知ないですかね