FastCGI環境でのFCGIスクリプトの実行前提
ダイナミックhttpd.conf必要に応じて FastCgiConfig にてパラメータを指定する。ウェブからのアクセスがあった場合にcount.fcgiは起動される。 <IfModule mod_fastcgi.c> AddHandler fastcgi-script fcgi # FastCgiConfig </IfModule> <VirtualHost *:80> ServerAdmin root@localhost ServerName 192.168.0.100 DocumentRoot /home/www/htdocs ErrorLog /home/www/logs/error_log CustomLog /home/www/logs/access_log common <Directory /> Order Deny,Allow Allow from All Options All AllowOverride All </Directory> </VirtualHost> count.fcgi#!/usr/local/bin/perl use FCGI; my $request = FCGI::Request(); my $count = 0; while ( $request->Accept() >= 0 ) { print "content-type: text/html\r\n\r\n"; print ++$count; } スタティックhttpd.confウェブサーバ(再)起動時にcount.fcgiは起動される。 <IfModule mod_fastcgi.c> AddHandler fastcgi-script fcgi FastCgiServer /home/www/cgi-bin/count.fcgi -processes 3 </IfModule> count.fcgiスクリプトの内容は上と同じ。 外部サーバUNIXドメインソケットを使って、外部FCGIスクリプトサーバと通信する。 httpd.confFastCgiExternalServerを指定する。 <IfModule mod_fastcgi.c> AddHandler fastcgi-script fcgi FastCgiExternalServer /home/www/htdocs/count.fcgi -socket /tmp/fastcgi.socket </IfModule> (略) count.pl#!/usr/local/bin/perl use FCGI; umask 000; my $socket = FCGI::OpenSocket( "/tmp/fastcgi.socket", 5 ); my $request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket ); my $count = 0; while ( $request->Accept() >= 0 ) { print "content-type: text/html\r\n\r\n"; print ++$count; } FCGI::CloseSocket($socket); 説明まずシェルからcount.plを起動する(count.plの設置場所はどこでも良い)。この状態で、ブラウザで http://192.168.0.100/count.fcgi にアクセスする。 count.fcgiはファイルとして存在しない。実際には、ソケットファイル /tmp/fastcgi.socket で通信する。 また、UNIXドメインソケットでなく、TCPポートを使って通信するには、Apacheの設定とFCGIスクリプトを以下のようにする。これでローカルホストの8000番ポートを使って通信するようになる。 FastCgiExternalServer /home/www/htdocs/count.fcgi -host localhost:8000 my $socket = FCGI::OpenSocket( ":8000", 5 ); 参考 |
|