ApacheでCGI
http://httpd.apache.org/docs/2.2/howto/cgi.html を自分用にまとめ
基本はScriptAlias
ScriptAlias
ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
- /cgi-bin/で始まるリソースへのリクエストは,ディレクトリ/usr/local/apache2/cgi-bin/にマップしてCGIプログラムとして扱うようApacheに示している.
- URL http://www.example.com/cgi-bin/test.pl が要求された場合,Apacheはファイル/usr/local/apache2/cgi-bin/test.plを実行してその出力を返すことを試みる.
- Aliasディレクティブとかなり似ている.
- AliasとScriptAliasは通常,DocumentRootディレクトリ外のディレクトリのために使用される.
- AliasとScriptAliasの違いは,ScriptAliasが接頭辞で始まるすべてのURLをCGIプログラムとみなすという追加の意味を含んでいること.
ScriptAliasディレクトリ外のCGI
- 任意のディレクトリでCGIの実行を許可するには二段階の設定が必要になる.
- AddHandlerやSetHandlerディレクティブによってcgi-scriptハンドラを使用可能にする.
- どのファイルがCGIファイルかをApacheに伝えている.
- OptionsディレクティブでExecCGIを指定する.
- 特定のディレクトリ配下でCGIの実行を許可している.
- AddHandlerやSetHandlerディレクティブによってcgi-scriptハンドラを使用可能にする.
AddHandler
AddHandler cgi-script .cgi
- 拡張子extensionが名前にあるファイルを指定されたhandler-nameで扱うようApacheに設定する. マッピングは既にある他のマッピングに追加され,同じ拡張子extensionのマッピングを上書きする.
- 上記の例は拡張子".cgi"で終わるファイルをCGIスクリプトとして扱う設定.
SetHandler
SetHandler cgi-script
- .htaccessやDirectoryセクション,Locationセクションに書かれた場合,このディレクティブはそこにあるすべてのファイルがhandler-nameで指定されたハンドラで扱われることを強制する.
- SetHandlerはデフォルトのハンドラをオーバーライドするので,通常の挙動,たとえば,スラッシュで終わるURLがリクエストされたときにディレクトリやインデックスファイルを返すような挙動が行われなくなる.
- 上記の例はすべてCGIスクリプトとして扱う設定
ExecCGI
<Directory /usr/local/apache2/htdocs/somedir> Options +ExecCGI </Directory>
- mod_cgiによるCGIスクリプトの実行を許可する.
- 上記の例では/usr/local/apache2/htdocs/somedir配下でCGIの実行を許可している.
その他
- CGI
- Common Gateway Interface. ウェブサーバが外部プログラムと協調して動作するための方法を定義している.
- ハンドラ
- ファイルが呼ばれたときに実行される動作のApacheにおける内部表現.
- 通常,ファイルにはファイルタイプに基づいた暗黙のハンドラがある.
- すべてのファイルは単にサーバに扱われるが,ファイルタイプの中には別に「ハンドル(扱う)」されるものもある.
- ファイルタイプに関係なくファイルの拡張子や置いている場所に基づいて明示的にハンドラを指定することもできる.
- ファイルにタイプとハンドラの両方を関連付けることができるという点で優れている.
- ハンドラはサーバに組み込んだり,モジュールとして含めたりして追加することができる.
- mod_cgi/cgi-scriptハンドラ
- cgi-scriptハンドラが指定されているファイルはCGIスクリプトとして扱われ実行される.
- ファイルはAddHandlerディレクティブに指定された拡張子を名前に含むか, ScriptAliasディレクトリに存在することによりこのハンドラになる.
- 後方互換性のため,MIMEタイプがapplication/x-httpd-cgiのファイルにも CGIスクリプトのハンドラが有効になる.
- この独自MIMEタイプの利用は非推奨.