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

Ads

どうやるか?

Apache2 では mpm*1 というものを選ぶことが出来る。
これが、デフォルトだと 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 オプションの話なのかと思いがちだが、違うので気をつけるべし。 *2

VirtualHost を別ユーザで動かす為の設定

重要なディレクティブは AssignUserIDChildPerUserID である。

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

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

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


*1 とりあえずの設定メモなので mpm の説明はここでは省略(^^;
*2 僕はこれで無駄に時間を食ってしまった…

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-01-15 (月) 11:45:57 (4350d)