コンテンツへスキップ →

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

無料メルマガ<特典付き>

個人開発・ビジネスについての有益な情報を無料メルマガでお届けします。

特典:個人開発の教科書<心得編>
これまでの個人開発経験を秘伝のタレ的な内容としてエッセンスをまとめました。35ページにわたる大ボリュームです。

個人開発のスキルアップにMENTA

MENTAはいろんなプロに相談できるNo1メンターサービスです。

僕自身もプロダクトの壁打ち・相談にのっています。個人開発でもコードレビュー、セキュリティ面のチェック、デザイン、広告、コンテンツマーケ、SNS集客について相談する、など使えます。

YouTubeでも個人開発ノウハウを発信中!

PROFILE

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

カテゴリー: HACK 開発奮闘記