Apache HTTP サーバ バージョン 2.4
Apache モジュール mod_cgi
この日本語訳はすでに古くなっている 可能性があります。 最近更新された内容を見るには英語版をご覧下さい。
| 説明: | CGI スクリプトの実行 |
|---|---|
| ステータス: | Base |
| モジュール識別子: | cgi_module |
| ソースファイル: | mod_cgi.c |
概要
ハンドラ cgi-script
が指定されているファイルは CGI スクリプトとして扱われ、
サーバにより実行され、その出力がクライアントに返されます。
ファイルは、AddHandler
ディレクティブに指定された 拡張子を名前に含むか、
ScriptAlias
ディレクトリに存在することによりこのハンドラになります。
Apache で CGI スクリプトを使用するためのイントロダクションは、 CGI による動的コンテンツ を参照してください。
Unix でマルチスレッドの MPM を使っている場合は、このモジュールの
代わりに mod_cgid を使う必要があります。
ユーザレベルではこの二つのモジュールは本質的には同一です。
後方互換性のため、 MIME タイプが application/x-httpd-cgi
であるファイルでも cgi-script ハンドラが有効になります。この特殊な MIME タイプを
使う方法は非推奨です。
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 スクリプトのデバッグは、正しく動作していないスクリプトの出力 (標準出力とエラー) を調べることができないために、難しい状態が続いていました。 これらのディレクティブはより詳細なエラーのログ収集を提供します。
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からの相対パスとして
扱われます。
このログは子プロセスが実行されているユーザとしてオープンされます。
すなわち、User ディレクティブで指定された
ユーザです。これは、スクリプトログが書かれるディレクトリがそのユーザで
書き込み可能か、スクリプトファイルが手動で作成され、そのユーザで
書き込み可能になっている必要があるということです。スクリプトログを
アクセスログなどのためのログディレクトリに書かれるようにしたときは、
そのディレクトリを子プロセスを実行しているユーザの権限で
書き込み可能にはしないようにしてください。
スクリプトのログ収集は CGI スクリプトを書くときの デバッグ用の機能として意図されていて、通常のサーバで 常に使用されるようには意図されていないということに注意してください。 速度や効率は最適化されておらず、設計された以外の方法で使用されると セキュリティの問題があるかもしれません。
ScriptLogLength ディレクティブ
| 説明: | CGI スクリプトのログファイルの大きさの上限 |
|---|---|
| 構文: | ScriptLogLength bytes |
| デフォルト: | ScriptLogLength 10385760 |
| コンテキスト: | サーバ設定ファイル, バーチャルホスト |
| ステータス: | Base |
| モジュール: | mod_cgi, mod_cgid |
ScriptLogLength は CGI スクリプトのログファイル
の大きさを制限するために使用することができます。ログファイルは
CGI のエラー毎に大量の情報 (リクエストのすべてのヘッダ、
すべての出力)をログしますので、すぐに大きなファイルになります。
この大きさの制限がないことによる問題を防ぐために、
このディレクティブを使って CGI のログファイルの
最大のファイルサイズを設定することができます。
ファイルがこの大きさを超えた場合は、それ以上は書き込まれません。
コメント
Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our mailing lists.
