CGI(Common Gateway Interface)とは、クライアントからのリクエストに対しファイルをそのまま返すのではなく、外部プログラムを実行し、その処理結果として出力された HTML(動的なコンテンツ)をクライアントへ返す外部プログラム、および外部プログラムとのインターフェース仕様のことを言います。実行される外部プログラムは、CGI スクリプトや CGI プログラムと呼ばれます。多くの Web サイトで動的なコンテンツを提供するために CGI が使用されています。
Apache で CGI プログラムの実行を許可するには、いくつかの方法があります。ひとつは、CGI プログラムの置かれる特別なディレクトリを ScriptAlias ディレクティブで定義する方法です。ScriptAlias については、項9.11を参照してください。Apache で CGI プログラムの実行を処理する mod_cgi モジュールは、ScriptAlias で指定されたディレクトリにあるファイルを CGI プログラムとして処理します。Turbolinux 11 Server の /etc/httpd/conf/httpd.conf には以下の記述があり、デフォルトで /var/www/cgi-bin ディレクトリに置かれたファイルのみを CGI プログラムとして実行するように設定されています。
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" |
例えば、クライアントの Web ブラウザから http://www.example.com/cgi-bin/test-cgi へのリクエストがあった場合、Apache Web サーバーは、/var/www/cgi-bin/ ディレクトリに置かれた test-cgi ファイルを実行し、その結果をクライアントへ返します。
もうひとつの方法は、ScriptAlias ディレクトリ以外での CGI 実行を許可する方法です。AddHandler や SetHandler ディレクティブで cgi-script ハンドラを有効にし、さらに実行を許可するディレクトリに対し Options ディレクティブで ExecCGI を指定します。
AddHandler ディレクティブは、指定された拡張子を持つファイルとハンドラの関連付けを行うことにより、ファイルの MIME タイプに依存しない動作を定義することができます。ハンドラとはファイルをそのまま返すのではなく、あらかじめ決められた処理を行うための Apache の内部処理のことを言います。Apache では、CGI プログラムを実行するためのハンドラとして cgi-script が用意されています。Turbolinux 11 Server の /etc/httpd/conf/httpd.conf には以下の設定がコメントとして記述されていますので、cgi-script ハンドラを有効にするには、行頭にあるコメント記号を削除します。
AddHandler cgi-script .cgi |
これにより、拡張子 .cgi を持つファイルは、CGI プログラムとして実行されるようになります。なお、複数の拡張子を指定したい場合は、スペースで区切り入力することができます。ただし、この設定を有効にすると、指定した拡張子を持つすべてのファイルが CGI プログラムとして処理されるため、ディレクトリに対するアクセス制御設定に注意しなければなりません。
CGI プログラムを格納するディレクトリの Options ディレクティブには ExecCGI を明記し、それ以外のディレクトリでは、ExecCGI が有効とならないように注意してください。(詳細は、項9.9を参照)。
以下は、ユーザーディレクトリ(~/public_html)で CGI プログラムを実行可能にするための設定例です。
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI
AddHandler cgi-script .cgi
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
Order deny,allow
Deny from all
</LimitExcept>
</Directory> |
Options ディレクティブに ExecCGI が指定されていることにより、各ユーザーは、~/public_html/ ディレクトリに格納した拡張子 .cgi のファイルを CGI プログラムとして実行することが可能になります。
設定後は、変更を反映させるために Apache を再起動します。