Apache HTTP サーバ バージョン 2.0
Apache モジュール mod_cgi
説明: | CGI スクリプトの実行 |
---|---|
ステータス: | Base |
モジュール識別子: | cgi_module |
ソースファイル: | mod_cgi.c |
概要
Mime タイプが application/x-httpd-cgi
であるか、ハンドラ cgi-script
(Apache 1.1 以降)
が指定されているファイルは CGI スクリプトとして扱われ、
サーバにより実行され、その出力がクライアントに返されます。
ファイルは、AddType
ディレクティブに指定された 拡張子を名前に含むか、
ScriptAlias
ディレクトリに存在することによりこのタイプになります。
サーバが CGI スクリプトを実行するときには、
DOCUMENT_ROOT
と呼ばれる変数を環境に追加します。この変数は
DocumentRoot
の値を保持します。
Apache で CGI スクリプトを使用するためのイントロダクションは、 CGI による動的コンテンツ を参照してください。
Unix でマルチスレッドの MPM を使っている場合は、このモジュールの
代わりに mod_cgid
を使う必要があります。
ユーザレベルではこの二つのモジュールは本質的には同一です。
CGI 環境変数
サーバは CGI 規格 で決められている CGI 環境変数を設定します。以下のものは、条件付きで設定されます。
- PATH_INFO
- これは
AcceptPathInfo
ディレクティブが明示的にoff
に設定されている場合は設定されません。デフォルトの、AcceptPathInfo
が 指定されていないときの振る舞いでは、mod_cgi
はパス情報 (URI のスクリプトのファイル名の後に続く/more/path/info
) を 受け付けますが、コアはサーバはパス情報のあるリクエストに 対して 404 NOT FOUND エラーを返します。AcceptPathInfo
ディレクティブを 省略すると、mod_cgi
へのリクエストに対してOn
を 設定したのと同じ効果になります。 - REMOTE_HOST
HostnameLookups
がon
(デフォルトでは off です) で、アクセスしているホストのアドレスの DNS の逆引きが実際にホスト名を見つけたときにのみ設定されます。- REMOTE_IDENT
IdentityCheck
がon
に設定されていて、アクセスしているホストが ident プロトコルをサポートしているときにのみ設定されます。 これは簡単に偽ることができ、クライアントとサーバの間に プロキシがあればまったく役に立たないので、 この変数の値は信用できないということに注意してください。- REMOTE_USER
- CGI スクリプトに認証が必要なときにのみ設定されます。
CGI のデバッグ
CGI スクリプトのデバッグは、正しく動作していないスクリプトの出力 (標準出力とエラー) を調べることができないために、難しい状態が続いていました。 これらの Apache 1.2 以降にある ディレクティブはより詳細なエラーのログ収集を提供します。
CGI ログファイルの書式
設定されているときには、CGI エラーログは適切に動作しないすべての CGI をログ収集します。それぞれの正しく動作しない CGI スクリプトは 複数の行にわたる情報がログ収集されます。最初の 2 行は常に以下の書式です:
%% [time] request-line
%% HTTP-status CGI-script-filename
エラーが、CGI スクリプトが実行できないというものである場合は、 ログファイルはさらにもう 2 行書かれます:
%%error
error-message
そうではなく、エラーが正しくないヘッダ情報を返す結果である場合 (スクリプトのバグであることがよくあります)、 以下の情報がログ収集されます:
%request
受け取ったすべての HTTP リクエストヘッダ
(もしあれば) POST や PUT の中身
%response
CGI スクリプトにより出力されたすべてのヘッダ
%stdout
CGI 標準出力
%stderr
CGI 標準エラー
(スクリプトが標準出力や標準エラーに何も出力しなかった場合は、 %stdout や %stderr はありません)。
ScriptLog ディレクティブ
説明: | CGI スクリプトのエラーログファイルの場所 |
---|---|
構文: | ScriptLog file-path |
コンテキスト: | サーバ設定ファイル, バーチャルホスト |
ステータス: | Base |
モジュール: | mod_cgi , mod_cgid |
ScriptLog
ディレクティブは CGI スクリプトの
エラーログファイルを設定します。ScriptLog
が
設定されていないときは、
エラーログは作成されません。設定されているときは、CGI
のエラーはすべて引数として与えられているファイル名にログされます。
相対パスで指定されているときは、
ServerRoot
からの相対パスとして
扱われます。
例
ScriptLog logs/cgi_log
このログは子プロセスが実行されているユーザとしてオープンされます。
すなわち、User
ディレクティブで指定された
ユーザです。これは、スクリプトログが書かれるディレクトリがそのユーザで
書き込み可能か、スクリプトファイルが手動で作成され、そのユーザで
書き込み可能になっている必要があるということです。スクリプトログを
アクセスログなどのためのログディレクトリに書かれるようにしたときは、
そのディレクトリを子プロセスを実行しているユーザの権限で
書き込み可能にはしないようにしてください。
スクリプトのログ収集は CGI スクリプトを書くときの デバッグ用の機能として意図されていて、通常のサーバで 常に使用されるようには意図されていないということに注意してください。 速度や効率は最適化されておらず、設計された以外の方法で使用されると セキュリティの問題があるかもしれません。
ScriptLogBuffer ディレクティブ
説明: | スクリプトログに記録される PUT や POST リクエストの内容の上限 |
---|---|
構文: | ScriptLogBuffer bytes |
デフォルト: | ScriptLogBuffer 1024 |
コンテキスト: | サーバ設定ファイル, バーチャルホスト |
ステータス: | Base |
モジュール: | mod_cgi , mod_cgid |
大きな本体を受け取ったときにログファイルがすぐに大きくなりすぎる 問題を避けるために、ファイルにログ収集される PUT と POST の本体の大きさは制限されています。デフォルトでは、1024 バイトまでがログ収集されますが、 このディレクティブはそれを変更することができます。
ScriptLogLength ディレクティブ
説明: | CGI スクリプトのログファイルの大きさの上限 |
---|---|
構文: | ScriptLogLength bytes |
デフォルト: | ScriptLogLength 10385760 |
コンテキスト: | サーバ設定ファイル, バーチャルホスト |
ステータス: | Base |
モジュール: | mod_cgi , mod_cgid |
ScriptLogLength
は CGI スクリプトのログファイル
の大きさを制限するために使用することができます。ログファイルは
CGI のエラー毎に大量の情報 (リクエストのすべてのヘッダ、
すべての出力)をログしますので、すぐに大きなファイルになります。
この大きさの制限がないことによる問題を防ぐために、
このディレクティブを使って CGI のログファイルの
最大のファイルサイズを設定することができます。
ファイルがこの大きさを超えた場合は、それ以上は書き込まれません。