CGIプログラムとは,Webサーバ上で動作するプログラムです。このCGIプログラムを使用すれば,静的なHTMLへのアクセスだけでは実現できないインタラクティブなWebアクセスができます。
CGIプログラムを実行するには,ScriptAliasディレクティブでCGIプログラムがあるディレクトリを指定する方式,AddHandlerディレクティブを使用しファイル拡張子にcgi-scriptハンドラを指定する方式およびSetHandlerディレクティブでcgi-scriptハンドラを指定する方式があります。
httpsd.confで設定する場合は,CGIプログラムの管理のしやすさの点で,ScriptAliasディレクティブによる設定を推奨します。
CGIプログラムのパス名を<Application Serverのインストールディレクトリ>/httpsd/cgi-bin/CGIプログラムファイル名とし,これに対してクライアントから/cgi-bin/CGIプログラムファイル名でアクセスする場合
ScriptAlias /cgi-bin/ "<Application Serverのインストールディレクトリ>/httpsd/cgi-bin/" |
AddHandler cgi-script .cgi |
なお,OptionsディレクティブでExecCGIオプションの設定が必要です。
<FilesMatch ^script> |
CGIプログラムはWebブラウザから次の形式のURLを指定して呼び出します。
http://ホスト名〔:ポート番号〕/パス名〔?問い合わせ文字列〕 |
WebサーバからCGIプログラムに環境変数を渡します。詳細は「付録B CGIプログラムに渡す環境変数」を参照してください。
CGIプログラムのサンプルプログラムと,その実行例を説明します。
#! c:¥bin¥perl.exe |
http://www.example.com/cgi-bin/test-cgi.pl/ABC?X=1&Y=2 |
CGI/1.1の環境変数以外にWebサーバからCGIプログラムに情報を渡す場合の指定方法について説明します。
コンフィグファイルにCGIプログラムに渡す環境変数や,その値を指定できます。CGIプログラムに渡さない環境変数の指定もできます。
PassEnv 環境変数 CGIプログラムに渡す環境変数の指定 |
クライアントのリクエストを基に,環境変数を定義できます。リクエストしているクライアントのホスト名やIPアドレスなどを基に環境変数を定義したり,環境変数の設定を解除したりできます。
SetEnvIfNoCase Request_URI "¥.(gif)|(jpg)$" request_is_image |
この場合,ファイル拡張子が.gifまたは.jpgのとき(このディレクティブの場合,大文字,小文字の区別はしません),request_is_imageという環境変数をCGIプログラムに渡します。
CGIプログラムとサーバスレッド間のデータ送受信には,CGIプログラムの標準入力,標準出力,標準エラー出力を使用しています。データ送受信中にはTimeoutディレクティブは有効になります。CGIプログラム作成時には,データの送受信完了後は,標準入出力などを閉じるかまたは終了してください。
CGIプログラムはWebサーバが停止しても,CGIプログラム自身が処理を終えるまで終了しません。CGIプログラムを強制終了するには「タスクマネージャ」から終了させます。
CGIプログラムには,User,Groupディレクティブ指定値での実行権限が必要です。
リクエストURLに,CGIプログラムに渡すパス情報が指定された場合,そのパス情報を環境変数PATH_INFOに,パス情報をファイルシステム上のパスに変換した値を環境変数PATH_TRANSLATEDに設定します。パス情報をファイルシステム上のパスに変換する際には,DocumentRootディレクティブに指定されたパスを基点とします。パス情報に対し,Aliasディレクティブなどで別名を指定している場合は,その指定に従って変換します。
Webサーバの設定によって,環境変数PATH_TRANSLATEDに設定されたパスへのアクセスを許可していない場合には,エラーログにアクセス拒否のメッセージを出力します。このメッセージを出力した場合でも,WebサーバはCGIプログラムを実行し,リクエスト処理を続行します。この際,環境変数PATH_TRANSLATEDもCGIプログラムに渡されます。
[Fri Feb 20 12:00:00 2004] [error] [client 192.168.1.1] client denied by server configuration: C:/Program Files/Hitachi/Cosminexus/httpsd/ABC |