noob

底辺オペレーターのメモ

ApacheでCGI

http://httpd.apache.org/docs/2.2/howto/cgi.html を自分用にまとめ

基本はScriptAlias

  • CGIプログラム用の特別な「別」ディレクトリをApacheに設定する.
  • Apacheはこのディレクトリ中の全てのファイルをCGIプログラムであると仮定して,実行を試みる.

ScriptAlias

ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
  • /cgi-bin/で始まるリソースへのリクエストは,ディレクトリ/usr/local/apache2/cgi-bin/にマップしてCGIプログラムとして扱うようApacheに示している.
  • Aliasディレクティブとかなり似ている.
    • AliasとScriptAliasは通常,DocumentRootディレクトリ外のディレクトリのために使用される.
    • AliasとScriptAliasの違いは,ScriptAliasが接頭辞で始まるすべてのURLをCGIプログラムとみなすという追加の意味を含んでいること.

ScriptAliasディレクトリ外のCGI

  • 任意のディレクトリでCGIの実行を許可するには二段階の設定が必要になる.
    1. AddHandlerやSetHandlerディレクティブによってcgi-scriptハンドラを使用可能にする.
      • どのファイルがCGIファイルかをApacheに伝えている.
    2. OptionsディレクティブでExecCGIを指定する.
      • 特定のディレクトリ配下でCGIの実行を許可している.

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タイプの利用は非推奨.