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

2018/03/23更新 カテゴリー:ビジネスハック,開発奮闘記 タグ: , ,
  • このエントリーをはてなブックマークに追加

本日、サーバーを移転したんですが、ついでにこれまで不便だったNginxのキャッシュクリアをPHPからできるようにしてみました。

実は既に素晴らしいプラグイン「Nginx Cache Controller」があって、これでキャッシュの管理ができるのですが、こちらはFastCGIでPHPを動かしていないと使えません。そんなわけで、Nginx+Apacheの環境では使えるものがなかったため、自分用に作ることにしました。

SPONSOR

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");

を実行すると、キャッシュのクリアができるようになりました。

フリーランスエンジニアの稼ぎ方

  • このエントリーをはてなブックマークに追加
SPONSOR

PROFILE

プロフィール

入江 慎吾
自分が作ったサービスで生きていく。同じゴールを目指すサービス開発集団「入江開発室」を運営(現在約280名) / 個人間スキルシェアサービス「MENTA」は約1ヶ月で売上100万円を達成。1日で100社が利用した「JobTag」など多数開発
(詳しいプロフィール)

PRODUCT

イリテクで開発したプロダクト

RELATION

関連する記事

SPONSOR

TAG

タグから記事をさがす