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 ); 参考 |
|