Webサーバー上でスクリプトを処理して結果を送信する「CGI」について説明します。設定ファイル(httpd.conf)で,CGIプログラムの配置場所を変更できます。

写真1●CGIの実行例
写真1●CGIの実行例
CGI機能を利用して掲示板を動作させている。

 前回は,動的コンテンツを実現する手法としてSSI(Server Side Include)を説明しました。SSIのほかに動的コンテンツを実現する手法としてよく知られているのが「CGI」(Common Gateway Interface)です。

 CGIを使えば,掲示板やブログ,Webメール,グループウエアといった動的なコンテンツを作成できます(写真1)。今回と次回の2回に分けて,CGIの動作方法と簡単なCGIの作成方法,CGIの実行結果をHTMLファイルに埋め込む方法を紹介します。


CGIの仕組み

 CGIは,Webブラウザからの要求を受けて,Webサーバーがプログラムを呼び出し,その結果を返答する仕組みです。図1のように,プログラムは一般にWebサーバーが動作するマシン上で実行されます。

図1●CGIの動作
図1●CGIの動作
ApacheはCGIプログラムを呼び出し,その結果をクライアントに送信する。

 クライアントは一般に,CGIプログラム名を指定してWebサーバーにアクセスします。例えば,「http://server/hello.cgi」のようなURLで接続します。ApacheはこれがCGIプログラムなのかどうかを判断します。CGIプログラムだと判断すると,実行して,その出力をクライアントに返します。

 プログラムの出力結果は,HTMLなどWebブラウザが処理できる形式で記載します。画像や動画などといったデータでも構いません。

 CGIで実行するプログラムには,シェル・スクリプトやPerl,PHP,Rubyなどによるスクリプト,C言語などによる実行形式のプログラムが使えます。特にCGIでは,インターネット上の掲示板などでPerlがよく利用されています。

 ApacheはCGIの機能を「mod_cgi」モジュールで実現しています。CGIを利用するには,mod_cgiモジュールがApacheに読み込まれている必要があります。ただし,Fedora 8に組み込まれているApacheは,デフォルトでmod_cgiモジュールを読み込む設定になっています。

CGIの設定を確認する

 それでは,ApacheでCGI機能が利用できるように設定しましょう。

 Fedora 8のApacheではCGIの設定が既に施されています。httpd.confの中の「ScriptAlias」項目で,

ScriptAlias /cgi-bin/ "/var/www/cgi-bin"

と記載されています。

 この場合,Webブラウザでドキュメント・ルート以下のcgi-binディレクトリを指定してアクセスすると,/var/www/cgi-bin以下のスクリプトが実行されます。例えば,「http://xxxxx.xxx.xxx/cgi-bin/script.cgi」にアクセスすれば,Apacheは「/var/www/cgi-bin/script.cgi」ファイルを実行します。

 CGIプログラムを配置しているディレクトリには図2のように設定されています。

図2●格納ディレクトリの設定
図2●格納ディレクトリの設定
CGIを格納するディレクトリは,外部から不用意に閲覧されないよう設定されている。

 OptionsやAllowOverride項目を「None」にすれば,ディレクトリ内のファイルの一覧やその内容を表示しないようにできます。このディレクトリに置かれているCGIプログラムを一覧表示できるようにするのは危険です。悪意のあるユーザーがCGIプログラムを使ってサーバーに攻撃するかもしれません。