このモジュールは CGI スクリプトを実行する機能を提供します。
ステータス: Base
ソースファイル: mod_cgi.c
モジュール識別子: cgi_module
Mime タイプが application/x-httpd-cgi
であるか、ハンドラ cgi-script
(Apache 1.1 以降)
が指定されているファイルは CGI スクリプトとして扱われ、
サーバにより実行され、その出力がクライアントに返されます。
ファイルは、AddType
ディレクティブに指定された 拡張子を名前に含むか、
ScriptAlias
ディレクトリに存在することによりこのタイプになります。
ScriptAlias
ディレクトリになく、AddType
ディレクティブにより application/x-httpd-cgi
のタイプを持つファイルは、Options ExecCGI
が指定されていなければサーバにより実行されることはありません。
詳細は Options
ディレクティブを 参照してください。
サーバが CGI スクリプトを実行するときには、
DOCUMENT_ROOT
と呼ばれる変数を環境に追加します。この変数は
DocumentRoot
の値を保持します。
Apache で CGI スクリプトを使用するためのイントロダクションは、 CGI による動的コンテンツ を参照してください。
Options, ScriptAlias, AddType, AddHandler も参照してください。
サーバは CGI 規格 で決められている CGI 環境変数を設定します。以下のものは、条件付きで設定されます。
HostnameLookups
が on
(デフォルトでは off です)
で、アクセスしているホストのアドレスの DNS
の逆引きが実際にホスト名を見つけたときにのみ設定されます。on
に設定されていて、アクセスしているホストが
ident プロトコルをサポートしているときにのみ設定されます。
これは簡単に偽ることができ、クライアントとサーバの間に
プロキシがあればまったく役に立たないので、
この変数の値は信用できないということに注意してください。
CGI スクリプトのデバッグは、正しく動作していないスクリプトの出力 (標準出力とエラー) を調べることができないために、難しい状態が続いていました。 これらの Apache 1.2 以降にある ディレクティブはより詳細なエラーのログ収集を提供します。
設定されているときには、CGI エラーログは適切に動作しないすべての CGI をログ収集します。それぞれの正しく動作しない CGI スクリプトは 複数の行にわたる情報がログ収集されます。最初の 2 行は常に以下の書式です:
%% [time] request-line %% HTTP-status CGI-script-filename
エラーが、CGI スクリプトが実行できないというものである場合は、 ログファイルはさらにもう 2 行書かれます:
%%error error-message
そうではなく、エラーが正しくないヘッダ情報を返す結果である場合 (スクリプトのバグであることがよくあります)、 以下の情報がログ収集されます:
%request All HTTP request headers received POST or PUT entity (if any) %response All headers output by the CGI script %stdout CGI standard output %stderr CGI standard error
(スクリプトが標準出力や標準エラーに何も出力しなかった場合は、 %stdout や %stderr はありません)。
ScriptLog ディレクティブは CGI スクリプトの エラーログファイルを設定します。ScriptLog が設定されていないときは、 エラーログは作成されません。設定されているときは、CGI のエラーはすべて引数として与えられているファイル名にログされます。 相対パスで指定されているときは、 サーバルートからの相対パスとして扱われます。
このログは子プロセスが実行されているユーザとしてオープンされます。 すなわち、User ディレクティブで指定された ユーザです。これは、スクリプトログが書かれるディレクトリがそのユーザで 書き込み可能か、スクリプトファイルが手動で作成され、そのユーザで 書き込み可能になっている必要があるということです。スクリプトログを アクセスログなどのためのログディレクトリに書かれるようにしたときは、 そのディレクトリを子プロセスを実行しているユーザの権限で 書き込み可能にはしないようにしてください。
スクリプトのログ収集は CGI スクリプトを書くときの デバッグ用の機能として意図されていて、通常のサーバで 常に使用されるようには意図されていないということに注意してください。 速度や効率は最適化されておらず、設計された以外の方法で使用されると セキュリティの問題があるかもしれません。
ScriptLogLength は CGI スクリプトのログファイル の大きさを制限するために使用することができます。ログファイルは CGI のエラー毎に大量の情報 (リクエストのすべてのヘッダ、 すべての出力)をログしますので、すぐに大きなファイルになります。 この大きさの制限がないことによる問題を防ぐために、 このディレクティブを使って CGI のログファイルの 最大のファイルサイズを設定することができます。 ファイルがこの大きさを超えた場合は、それ以上は書き込まれません。
大きな本体を受け取ったときにログファイルがすぐに大きくなりすぎる 問題を避けるために、ファイルにログ収集される PUT と POST の本体の大きさは制限されています。デフォルトでは、1024 バイトまでがログ収集されますが、 このディレクティブはそれを変更することができます。