Cosminexus V9 アプリケーションサーバ Cosminexus HTTP Server
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> SetHandler cgi-script Options ExecCGI </FilesMatch> |
CGIプログラムはWebブラウザから次の形式のURLを指定して呼び出します。
http://ホスト名〔:ポート番号〕/パス名〔?問い合わせ文字列〕 |
WebサーバからCGIプログラムに環境変数を渡します。詳細は「付録B CGIプログラムに渡す環境変数」を参照してください。
CGIプログラムのサンプルプログラムと,その実行例を説明します。
#! c:\bin\perl.exe $argc=$#ARGV+1; print "Content-Type: text/plain\n"; print "\n"; print "argc is $argc. argv is \"@ARGV\".\n"; print "SERVER_SOFTWARE = $ENV{'SERVER_SOFTWARE'}\n"; print "SERVER_NAME = $ENV{'SERVER_NAME'}\n"; print "GATEWAY_INTERFACE = $ENV{'GATEWAY_INTERFACE'}\n"; print "SERVER_PROTOCOL = $ENV{'SERVER_PROTOCOL'}\n"; print "SERVER_PORT = $ENV{'SERVER_PORT'}\n"; print "REQUEST_METHOD = $ENV{'REQUEST_METHOD'}\n"; print "HTTP_ACCEPT = \"$ENV{'HTTP_ACCEPT'}\"\n"; print "PATH_INFO = \"$ENV{'PATH_INFO'}\"\n"; print "PATH_TRANSLATED = \"$ENV{'PATH_TRANSLATED'}\"\n"; print "SCRIPT_NAME = \"$ENV{'SCRIPT_NAME'}\"\n"; print "QUERY_STRING = \"$ENV{'QUERY_STRING'}\"\n"; print "REMOTE_HOST = $ENV{'REMOTE_HOST'}\n"; print "REMOTE_ADDR = $ENV{'REMOTE_ADDR'}\n"; print "REMOTE_USER = $ENV{'REMOTE_USER'}\n"; print "AUTH_TYPE = $ENV{'AUTH_TYPE'}\n"; print "CONTENT_TYPE = $ENV{'CONTENT_TYPE'}\n"; print "CONTENT_LENGTH = $ENV{'CONTENT_LENGTH'}\n"; |
http://www.example.com/cgi-bin/test-cgi.pl/ABC?X=1&Y=2 |
CGI/1.1の環境変数以外にWebサーバからCGIプログラムに情報を渡す場合の指定方法について説明します。
コンフィグファイルにCGIプログラムに渡す環境変数や,その値を指定できます。CGIプログラムに渡さない環境変数の指定もできます。
PassEnv 環境変数 CGIプログラムに渡す環境変数の指定 SetEnv 環境変数 値 CGIプログラムに渡す環境変数とその値の指定 UnsetEnv 環境変数 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 |
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.