FastCGI with mod_fastcgi
mod_fcgidとmod_fastcgiは別物という事実にショックを受けつつ、気を取り直してmod_fastcgiをインストールしてみる。
インストール
既にyumからapacheをinstallしているので、DSOでインストールする。
ちなみにDSOはDynamic Shared Objectの略で、実行時にLoadModuleディレクティブで読み込めるApacheモジュールのこと。そしてapxsはAPache eXtenSion toolのことである。
wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz tar zxfv mod_fastcgi-2.4.6.tar.gz cd mod_fastcgi-2.4.6
apache 1.3なら以下でOKらしいが、apache2だとうまくいかない...
# for apache 1.3... apxs -o mod_fastcgi.so -c *.c apxs -i -a -n fastcgi mod_fastcgi.so
INSTALL.AP2を見ると、以下のように書かれているので、これに従う。
$ cd <mod_fastcgi_dir> $ cp Makefile.AP2 Makefile $ make $ make install
ただし、top_dirを自分のinstallディレクトリに合わせる必要あるので、下記の通り書き直した。
#top_dir = /usr/local/apache2 top_dir = /usr/lib/httpd
/etc/httpd/conf/httpd.confを確認する。無事インストールされている模様。
LoadModule fastcgi_module /usr/lib/httpd/modules/mod_fastcgi.so
設定
まずは単純なfastcgiスクリプトとして動かそう、ということで/etc/httpd/conf.d/fastcgi.confに以下を記述してapache再起動する。なお、kotaro:kotaro(user:group)でhttpdが動作してる前提。
ScriptAlias /fcgi/ /home/kotaro/fcgi/
fcgiスクリプト
以下をScriptAlias設定した、ディレクトリ/home/kotaro/fcgiにhello.fcgiというファイル名で置く。実行権限はちゃんと付けておく。
#!/usr/bin/perl use CGI::Fast; while (my $q = CGI::Fast->new) { print("Content-Type: text/plain\n\n"); foreach $var (sort(keys(%ENV))) { $val = $ENV{$var}; $val =~ s|\n|\\n|g; $val =~ s|"|\\"|g; print "${var}=\"${val}\"\n"; } }
http://localhost/fcgi/hello.fcgi
で動いた!!!
ただし、これだと単なるCGIスクリプトと何も変わらない。プロセス常駐してこそFastCGIの意味があるのだが、方法はstatic, dynamic, externalの3つがある。まずはstaticからトライ。
static
/etc/httpd/conf.d/fastcgi.confを以下に設定
Alias /fcgi/ /home/kotaro/fcgi/ FastCgiServer /home/kotaro/fcgi/hello.fcgi -processes 5
これだと動かないので、/var/log/httpdのpermission変更する。
chmod o+x /var/log/httpd
確認すると...
[root@mdev1 ~]# ps aux | grep fcgi kotaro 1758 0.0 0.1 9976 1896 ? S 19:33 0:00 /usr/sbin/fcgi- kotaro 1759 0.0 0.3 5004 3148 ? S 19:33 0:00 /usr/bin/perl /home/kotaro/fcgi/hello.fcgi kotaro 1769 0.0 0.2 4812 2852 ? S 19:33 0:00 /usr/bin/perl /home/kotaro/fcgi/hello.fcgi kotaro 1770 0.0 0.2 4812 2820 ? S 19:33 0:00 /usr/bin/perl /home/kotaro/fcgi/hello.fcgi kotaro 1771 0.0 0.2 4812 2812 ? S 19:33 0:00 /usr/bin/perl /home/kotaro/fcgi/hello.fcgi kotaro 1772 0.0 0.2 4812 2816 ? S 19:33 0:00 /usr/bin/perl /home/kotaro/fcgi/hello.fcgi
ちゃんとfcgiのプロセスが動いてますね〜。ふぅ。