*Apache2をVirtualHost毎に別ユーザで動かす
#contents


**どうやるか?
Apache2 では mpm((とりあえずの設定メモなので mpm の説明はここでは省略(^^;)) というものを選ぶことが出来る。
~
これが、デフォルトだと Apache1.3 の頃と同じ動作をする prefork が選択されるが、
mpm に perchild を選ぶことで httpd のスレッド化(パフォーマンスアップ)と、
その副産物(?)としてVirtualHost を別々のユーザによるプロセスとして動かせるようになる。


**Apache2 をスレッド対応でコンパイル
mpm は Apache2 の根幹を成すものなので静的に組み込まないといけない。


***httpd を mpm=perchild で make する
一番単純な make は以下の通り。
 ./configure --with-mpm=perchild
 make
 su
 make install


***php のスレッドセーフ対応
いつも通りに make した PHP を使おうとすると、httpd の起動時に以下のようなエラーメッセージが表示されて起動に失敗する。

>[Thu Sep 11 18:17:47 2003] [crit] Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.~
>Pre-configuration failed

メッセージの意味は

>Apache がスレッド化されてるから PHP もスレッドセーフでコンパイルしろ!

ということ。
結局どうすればいいかというと、Apache2 をスレッド対応でコンパイルしたときに一緒に出来た apxs を使って PHP を再度コンパイルし直すだけでよいようだ。
あのメッセージを見ると PHP の ./configure オプションの話なのかと思いがちだが、違うので気をつけるべし。
((僕はこれで無駄に時間を食ってしまった…))


**VirtualHost を別ユーザで動かす為の設定
重要なディレクティブは
''[[AssignUserID>http://httpd.apache.org/docs-2.0/ja/mod/perchild.html#assignuserid]]''

''[[ChildPerUserID>http://httpd.apache.org/docs-2.0/ja/mod/perchild.html#childperuserid]]''
である。


***PHP が別ユーザで動くことを確認


***suEXEC(SuexecUserGroup)無しで CGI がユーザ権限で動くことを確認


***WebDAV が別ユーザで動くことを確認


*コメント
#comment


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS