日記帳だ! with Tux on Libserver

二度目の大改造!! 日記帳…か?を継承し、より柔軟でパワフルなBlogに変身しました。

RSSに対応しています。リンク・コメント・トラックバックは自由にしていただいてほぼ問題ありません。
RSS購読方法、僕のリンク・コメント・トラックバックについての考えを読むことをおすすめします。

<< 過去

未来 >>

FastCGIは本当に速いけど…それだけ?

PHPをFastCGI動作に変えてみた。
実はもうFastCGI動作なんですよ。
いろいろ調べてたが、案外うまくいったので。
実はこのPHPたちはhidemaroユーザーで動作している。
初めに実行速度の変化について書いておく。
この日記のトップページの表示速度は2.26秒から1.98秒に短縮された。
どうもFastCGI動作の方が高速っぽいです。
こういう成果は挙げたものの、実はSuExecという意味ではかなり残念なことに…
というわけで実現メモということ。
LibserverはVine Linuxですね。
Vine LinuxにおいてはApacheの設定ファイル類は/etc/apache2に入ってます。
Vineでは一般的にはhttpdとなってるところがほぼ全部apache2になってると思ってOK。
だからapt-getでインストールできればうれしいですね。
と思ってたら入れられるみたい。
# apt-get install mod_fcgid-apache2
# chmod 555 /var/log/apache2/
なんでchmodしないとだめなの?というのはそういうものだからと考える。
さて、まずSuExecのことは考えずにサクサクやっていきましょう。
設定ファイルは/etc/apache2/conf.d/mod_fcgid.confをいじるのがメイン。
あとはCGI動作させるディレクトリにOptions +ExecCGIとするだけなので。
<IfModule !mod_fcgid.c>
LoadModule fcgid_module modules/mod_fcgid.so
</IfModule>
<IfModule mod_fcgid.c>
AddHandler fcgid-script .php
AddHandler fcgid-script .fcgi
FCGIWrapper /usr/bin/php5-fcgi .php
</IfModule>
他にも設定あるけど省略。
FCGIWrapperを使うのがポイントです。
これによりスクリプトの改変不要になるし、PHPが常駐するというスタイルになるので便利?
ところでVineのPHPは--enable-fastcgiとなってたからいいのだが、
CentOSでみたらこうなってなかったのだが、これは他に何かいるのか?
それとも自分でコンパイルしろと?まぁこの辺は要調査。
あとPHPでCGIを有効にする必要があるかも。php.iniで、
 cgi.force_redirect = 0
あとこの設定でPHPはCGI動作するので実行権が必要。
これでうまくいった。
まぁここまでたどり着くのはわりと簡単だった。
FastCGIで動いている証明だが、まずphpinfo()で、Server APIがCGI/FastCGIとなっていること。
そしてps axでphp5-fcgiが何個か動作していること。
実はこの辺がPHPのFastCGI動作のおもしろいところで、
一般的にはFastCGIは/usr/bin/php5-fcgi index.fcgiとかいうのがプロセスにいることになる。
そのプログラムのためのプロセスだということ。
だけどPHPではこれを共有すると。まぁ一長一短あるけどいいじゃないと。
さて、どちらかというとやりたかったSuExecだが、結論を書いておく。
ユーザーごとにphp5-fcgiが必要…なんでやねん。
このままSuExecに必要な事項を書けばいいかなと思ったんだよね。
SuexecUserGroup hidemaro hidemaro
もしかするとさっきの設定の時点で動かなかった人もいるかも。
だって、public_html以下はSuExecで動作する人はねぇ…
/var/log/apache2/suexec.logにはこんなエラーが残る。
command not in docroot (/usr/bin/php5-fcgi)
どうもphp5-fcgiのある場所がよろしくないと。
それで、/var/www/cgi-bin以下にphp5-fcgiのシンボリックリンクを貼ってみたりしたのだが…
最終的には/var/www/phpcgiを作り、所有権をSuExecするユーザーにする。
そして、php5-fcgiをコピー、これも所有権を変える。
そしてこれをFCGIWrapperに指定する。
これで動く。ただかなり意味不明な方法ですけどね。
あとなぜか実行権を与えなくても動く。なぜに?
まぁこんな具合でして、うまく動きますねと。
ただこれでわかったのはFCGIWrapperがユーザーごとに必要でありそうなこと。
これはいろいろ調べてたが、まず間違えないことですね。
そのための具体的な方法はまた考えることにしよう。
とりあえずPHPをSuExec使ってFastCGI動作というのは達成できた…のかな?
Author : Hidemaro
Date : 2008/11/18(Tue) 22:28
コンピュータ・インターネット | Comment | trackback (0)
blog comments powered by Disqus

トラックバック

トラックバックURL取得

Tools