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でインストールできればうれしいですね。
と思ってたら入れられるみたい。
さて、まずSuExecのことは考えずにサクサクやっていきましょう。
設定ファイルは/etc/apache2/conf.d/mod_fcgid.confをいじるのがメイン。
あとはCGI動作させるディレクトリにOptions +ExecCGIとするだけなので。
FCGIWrapperを使うのがポイントです。
これによりスクリプトの改変不要になるし、PHPが常駐するというスタイルになるので便利?
ところでVineのPHPは--enable-fastcgiとなってたからいいのだが、
CentOSでみたらこうなってなかったのだが、これは他に何かいるのか?
それとも自分でコンパイルしろと?まぁこの辺は要調査。
あとPHPでCGIを有効にする必要があるかも。php.iniで、
これでうまくいった。
まぁここまでたどり着くのはわりと簡単だった。
FastCGIで動いている証明だが、まずphpinfo()で、Server APIがCGI/FastCGIとなっていること。
そしてps axでphp5-fcgiが何個か動作していること。
実はこの辺がPHPのFastCGI動作のおもしろいところで、
一般的にはFastCGIは/usr/bin/php5-fcgi index.fcgiとかいうのがプロセスにいることになる。
そのプログラムのためのプロセスだということ。
だけどPHPではこれを共有すると。まぁ一長一短あるけどいいじゃないと。
さて、どちらかというとやりたかったSuExecだが、結論を書いておく。
ユーザーごとにphp5-fcgiが必要…なんでやねん。
このままSuExecに必要な事項を書けばいいかなと思ったんだよね。
だって、public_html以下はSuExecで動作する人はねぇ…
/var/log/apache2/suexec.logにはこんなエラーが残る。
それで、/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)
実はもう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しないとだめなの?というのはそういうものだからと考える。
# chmod 555 /var/log/apache2/
さて、まず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)