Apache module mod_cgi

### Apache HTTP Server Version 1.3

# mod_cgi モジュール

このモジュールは 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 による動的コンテンツ を参照してください。

## ディレクティブ

- ScriptLog
- ScriptLogLength
- ScriptLogBuffer

Options, ScriptAlias, AddType, AddHandler も参照してください。

## CGI 環境変数

サーバは CGI 規格 で決められている CGI 環境変数を設定します。以下のものは、条件付きで設定されます。

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
      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 ディレクティブ

構文: ScriptLog filename
デフォルト: none
コンテキスト: サーバ設定ファイル
ステータス: mod_cgi

`ScriptLog` ディレクティブは CGI スクリプトの エラーログファイルを設定します。ScriptLog が設定されていないときは、 エラーログは作成されません。設定されているときは、CGI のエラーはすべて引数として与えられているファイル名にログされます。 相対パスで指定されているときは、 サーバルートからの相対パスとして扱われます。

このログは子プロセスが実行されているユーザとしてオープンされます。 すなわち、User ディレクティブで指定された ユーザです。これは、スクリプトログが書かれるディレクトリがそのユーザで 書き込み可能か、スクリプトファイルが手動で作成され、そのユーザで 書き込み可能になっている必要があるということです。スクリプトログを アクセスログなどのためのログディレクトリに書かれるようにしたときは、 そのディレクトリを子プロセスを実行しているユーザの権限で 書き込み可能にはしないようにしてください。

スクリプトのログ収集は CGI スクリプトを書くときの デバッグ用の機能として意図されていて、通常のサーバで 常に使用されるようには意図されていないということに注意してください。 速度や効率は最適化されておらず、設計された以外の方法で使用されると セキュリティの問題があるかもしれません。

### ScriptLogLength ディレクティブ

構文: ScriptLogLength bytes
デフォルト: 10385760
コンテキスト: サーバ設定ファイル
ステータス: mod_cgi

`ScriptLogLength` は CGI スクリプトのログファイル の大きさを制限するために使用することができます。ログファイルは CGI のエラー毎に大量の情報 (リクエストのすべてのヘッダ、 すべての出力)をログしますので、すぐに大きなファイルになります。 この大きさの制限がないことによる問題を防ぐために、 このディレクティブを使って CGI のログファイルの 最大のファイルサイズを設定することができます。 ファイルがこの大きさを超えた場合は、それ以上は書き込まれません。

### ScriptLogBuffer

構文: ScriptLogBuffer bytes
デフォルト: 1024
コンテキスト: サーバ設定ファイル
ステータス: mod_cgi

大きな本体を受け取ったときにログファイルがすぐに大きくなりすぎる 問題を避けるために、ファイルにログ収集される PUT と POST の本体の大きさは制限されています。デフォルトでは、1024 バイトまでがログ収集されますが、 このディレクティブはそれを変更することができます。

### Apache HTTP Server Version 1.3