Apache等のWEBサーバではPHPの実行方式に2種類あります。
一つはModule方式と言ってApacheのプロセス内でPHPを処理するもの。
もう一つはCGI方式と言ってApacheのプロセス内ではなく外部プログラムを通じてPHPを処理するもの。
大体の場合は、前者のModule方式を使っていることがほとんどではないかと思われます。
その理由として、Module方式の場合パフォーマンスで優位だがらです。
しかし、欠点がありますそれは、PHPの実行ユーザが「Apache」になりセキュリティ面から考えてみると「Apache」ユーザが書き込める所は、他人が作ったPHPで書き込まれてしまうという残念なことが……
その下準備としてwrapper経由でPHPがCGI方式で実行されるようにする。
[環境の説明]
O S:Centos6.6(64bit)
Apache :2.2.15
P H P:5.3.3
■作業内容
0.PHPの動作方式を確認
1 2 3 4 5 |
<?php echo "run user is ".exec("whoami")." OK?\n"; phpinfo(); ?> |
⇒ブラウザで確認して「Server API」が「Apache 2.0 Handler」ならModule方式
1.wrapperを設置
cd /var/www/
mkdir wrapper
cd wrapper/
vi php-wrapper
1 2 3 |
#!/bin/sh exec /usr/bin/php-cgi |
⇒上記の内容だけでOK
2.wrapperはCGIとなるため実行権限が必要
chmod 750 php-wrapper
chown apache: php-wrapper
⇒php-wrapperの所有者と権限を適切に設定
3.Apache上から.phpはphp-wrapper経由のCGIで起動するように設定する
cd /etc/httpd/conf.d/
vi php-wrapper.conf
1 2 3 4 5 6 |
AddHandler php5-cgi .php AddType text/html .php ScriptAlias /php-wrapper/ "/var/www/wrapper/" Action php5-cgi /php-wrapper/php-wrapper DirectoryIndex index.php |
⇒CGI経由にて実行されるべく上記の設定
4.PHPの設定ファイルが被るのでModule方式に使用されるphp.confをリネームする
mv php.conf php.conf_remove
5.Apacheの再起動
service httpd configtest
service httpd restart
6.実行方式の確認
ブラウザで「0.PHPの動作方式を確認」で確認したページへアクセスして
「Server API」が「CGI/FastCGI」ならCGI方式で実行されている。
■余談■
PHPをCGI方式で実行する方法として一例を紹介した訳だが他にもfcgiを使う方法等があります。