前回の5時間の実験の結果、PHP+SuEXECはすごくめんどくさいと言うことが分った.
suphpを試してみる
sudo aptitude install libapache2-mod-suphp suphp-common
設定の確認
/etc/suphp/suphp.conf
;Path all scripts have to be in
docroot=/var/www:${HOME}/public_html
;Umask to set, specify in octal notation
umask=0077
注意点1
sudo tail -f /var/log/httpd/suphp_log
[Tue Aug 23 13:25:36 2011] [warn] Script "/home/takuya/public_html/index.php" resolving to "/home/takuya/public_html/index.php" not within configured docroot
のようなエラーが出るときは/etc/suphp.confを見直す
このメッセージは「docroot外部でsuphpさせないぜ!へへっ」ていうこと
注意点2
php5(mod_php)が導入済みのApacheにインストールすると、カオスになるのでした.
競合でErrorになるんだけど・・・本当は共存できるんだよね.
以下の新規パッケージがインストールされます:
libapache2-mod-suphp libonig2{a} libqdbm14{a} php5-cgi{a} php5-suhosin{a} suphp-common{a}
以下のパッケージが更新されます:
php5-common{b}
更新: 1 個、新規インストール: 6 個、削除: 0 個、保留: 119 個。
アーカイブ 6,719 kB 中 6,492 kB を取得する必要があります。展開後に 16.6 MB のディスク領域が新たに消費されます。
以下のパッケージには満たされていない依存関係があります:
php5-gd: 依存: php5-common (= 5.2.6.dfsg.1-1+lenny9) [5.3.3-7+squeeze1 がインストール予定となっています]
php5-curl: 依存: php5-common (= 5.2.6.dfsg.1-1+lenny9) [5.3.3-7+squeeze1 がインストール予定となっています]
php5-mhash: 依存: php5-common (= 5.2.6.dfsg.1-1+lenny9) [5.3.3-7+squeeze1 がインストール予定となっています]
php5-xmlrpc: 依存: php5-common (= 5.2.6.dfsg.1-1+lenny9) [5.3.3-7+squeeze1 がインストール予定となっています]
php5-mcrypt: 依存: php5-common (= 5.2.6.dfsg.1-1+lenny9) [5.3.3-7+squeeze1 がインストール予定となっています]
php5-ldap: 依存: php5-common (= 5.2.6.dfsg.1-1+lenny9) [5.3.3-7+squeeze1 がインストール予定となっています]
php5-mysql: 依存: php5-common (= 5.2.6.dfsg.1-1+lenny9) [5.3.3-7+squeeze1 がインストール予定となっています]
php5-cli: 依存: php5-common (= 5.2.6.dfsg.1-1+lenny9) [5.3.3-7+squeeze1 がインストール予定となっています]
libapache2-mod-php5: 依存: php5-common (= 5.2.6.dfsg.1-1+lenny9) [5.3.3-7+squeeze1 がインストール予定となっています]
php5-gmp: 依存: php5-common (= 5.2.6.dfsg.1-1+lenny9) [5.3.3-7+squeeze1 がインストール予定となっています]
php5-common: 競合: php5-mhash [インストール済みの 5.2.6.dfsg.1-1+lenny9 に固定されています]
以下のアクションでこれらの依存関係の問題は解決されます:
以下のパッケージを削除する:
1) libapache2-mod-php5
2) moodle
3) php-openid
4) php-pear
5) php-xml-parser
6) php5-cli
7) php5-curl
8) php5-gd
9) php5-gmp
10) php5-ldap
11) php5-mcrypt
12) php5-mhash
13) php5-mysql
14) php5-xmlrpc
15) simplesamlphp
16) zabbix-frontend-php
以下の依存関係を未解決のままにする:
17) moodle が php5-xmlrpc を推奨
mod_php共存
たとえばこんな感じで、共存させてみた
#mod_phpのロード
<IfModule prefork.c>
LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
LoadModule php5_module modules/libphp5-zts.so
</IfModule>
AddHandler php5-script .php
AddType text/html .php
#suphpのロード
<IfModule mod_suphp.c>
suPHP_AddHandler x-httpd-php
#suPHP_UserGroup apache apache
<Directory />
suPHP_Engine off #全部でオフ
</Directory>
</IfModule>
#suphpを使いたいDirectory
<Directory /home/*/public_html>
AllowOverride All
Options IncludesNoExec ExecCGI FollowSymLinks
<IfModule mod_php5.c>
php_admin_flag engine off #phpをオフにして
</IfModule>
<IfModule mod_php4.c>
php_admin_flag engine off
</IfModule>
suPHP_Engine on #suphpをオンにする
AddHandler x-httpd-php .php #handlerもつけ直し
AddHandler cgi-script .cgi
</Directory>実際には複数のファイルに分割されてる設定だけどこんな感じです.
FastCGIなので、速度低下もそんなにないだろうし,共存させる意味は何だろうね.気分.
suphpを使った感想
とっても楽ちんです.SuExec+PHPやらCGIWrapをするくらいならsuphpをaptでイイと思います.
cgiの歴史をたどったようなモノだった.。。
suexec するあたりから cgi-bin と PATHINFOを調べて cgi-wrap で回避しつつ
それが進化して fastcgiになって wrap機能は suphpで一気に出来る
みんなが悩んで、考えた結果が今こんなに楽なんですね.