Nginx+Apacheの環境にて、PHPでクリアをキャッシュする

本日、サーバーを移転したんですが、ついでにこれまで不便だったNginxのキャッシュクリアをPHPからできるようにしてみました。
実は既に素晴らしいプラグイン「Nginx Cache Controller」があって、これでキャッシュの管理ができるのですが、こちらはFastCGIでPHPを動かしていないと使えません。そんなわけで、Nginx+Apacheの環境では使えるものがなかったため、自分用に作ることにしました。
目次
Nginxのキャッシュをクリアするには
Nginxのキャッシュは/var/cache/nginx/に作られていきます。なので、このフォルダに入っているファイルを消せばクリアできます。
rm -rf /var/cache/nginx/*
ワードプレスで新しい記事を書いて公開したら、このキャッシュをクリアしないと、トップページに新しい記事がでてきません。なので、記事公開後にこれまではSSHでログインして、キャッシュをクリアしていたというわけです。ちょっと面倒です。
PHPでコマンドを実行する
ターミナルでログインするひと手間をはぶくため、PHPファイルにアクセスしたら
rm -rf /var/cache/nginx/*
を実行するようにしてみました。これだとSSHログインがないので、少し楽です。
PHPで実行するには
exec("/bin/rm -rf /var/cache/nginx/*");
とすればいいんですが、動きません。
execで実行するユーザーは「apache」、nginxフォルダの所有ユーザーは「nginx」となっているため、削除することができません。そこでsudoコマンドを使って実行できるように設定します。
sudoコマンドを使えるようにする
まず、apacheユーザーは通常パスワードが設定されていないはずなので
#passwd apache
で任意のパスワードを設定します。
(パスワードを設定しないとsudoできないようです)
次に、sudoコマンドを実行できるように設定します。
#visudo ↓コメントアウト #Defaults requiretty ↓一番下に追記 apache plus.vc=(ALL) NOPASSWD: /bin/sh (環境に合わせてパスを設定)nginx_clear.sh :wq
通常はログインできるユーザーしかsudoできないようになっていますが、apacheはログイン出来ないユーザーです。それでも実行できるようにするため、requirettyをコメントアウトします。
記述しているのはapacheユーザーは特定のホスト(plus.vc)から(ALL)全てのユーザーに変身でき/bin/sh nginx_clear.shのみ実行できるという意味になります。NOPASSWDの後にコマンドを入れると、そのコマンドだけパスワード無しで実行できるようになります。
これでsudoコマンドが実行できるようになりました。
シェルスクリプトを作る
適当な場所にシェルスクリプトファイルを作ります。
#vi nginx_clear.sh
以下のコマンドを記述します。
#!/bin/sh sudo rm -rf /var/cache/nginx/*
これで、後はPHPで
exec("sudo sh nginx_clear.sh");
を実行すると、キャッシュのクリアができるようになりました。
[sc name=”engeneer”]
SHARE
無料メルマガ<特典付き>
個人開発・ビジネスについての有益な情報を無料メルマガでお届けします。
個人開発のスキルアップにMENTA
MENTAはいろんなプロに相談できるNo1メンターサービスです。
YouTubeでも個人開発ノウハウを発信中!
PROFILE

あらゆるスキルが学べるパーソナルメンターサービスMENTAの代表/個人開発が好きでこれまでに30個ほどのWEBサービスやアプリを作ってきました/福岡のWEB制作会社勤務→フリーランスエンジニア→法人立ち上げ→M&A億単位の売却を経験。 (詳しいプロフィール)