付録B HTTPサーバ・apacheの導入

CGIのテストを個人で行うために、 自分でHTTPサーバを立てることをお勧めします。 導入して単にCGIを動作させるだけでしたら、 さほど設定は難しくありません。

なお、詳しい解説は 日本語のapacheのホームページ に、 作者の設定ファイルは こちら にあります。

B.1 内容

ここではapacheについて詳しいことは述べずに、 単に、 CGIプログラムを動かすまでの導入と設定の流れを説明します。

B.2 apacheの簡単な紹介

apacheとはWWWのサーバ用のソフトウェアです。 ホームページを持つことができる ISP ではHTTPサーバが稼働していて、 ブラウザにウェブコンテンツを届けています。

CGIにおけるHTTPサーバの位置づけは、 クライアントから入力されたデータをCGIプログラムに届けて、 その結果をブラウザに返すことです。

B.3 apacheの入手

apacheは、 大抵のlinuxデストリビューション(RPM、deb、tgz)、 FreeBSD(packagesあるいはports)として配布されており、 プログラムのインストールまで容易に行うことができます。

自分でアーカイブをほどいてコンパイルする場合、 apacheは 日本語のサイト あるいは、 apacheの本家のサイト からリンクをたどることで入手できます。 pingコマンドでいちばん近いミラーサーバを探してください。

UNIX版のアーカイブ(tar.gz)のファイルサイズはおよそ1.2M、 Windows版のインストーラーのファイルサイズはおよそ3Mです。

B.4 インストール

UNIX系のapacheのインストールは、 アーカイブの展開、コンパイル、インストールで行います。 基本的に ./configure一発 であるため、 アーカイブの取得からインストールまで、 おおよそ、 以下のコマンドを実行する流れになっています。

(コマンド)
# fetch ftp://ftp.apache.or.jp/pub/apache/apache_1.3.12.tar.gz
(↑アーカイブの取得)
# gunzip apache_1.3.12.tar.gz
(↑アーカイブの展開 .gz)
# tar xvf apache_1.3.12.tar
(↑アーカイブの展開 .tar)
# cd apache_1.3.12
# ./configure
# make
(↑コンパイル)
# make install
(↑インストール)

Windows版のapacheは専用のインストーラーがついています。 ftpかhttpでダウンロードしたプログラムを実行すれば、 apacheを導入することができます。

B.5 基本的な設定

CGIプログラムを動作させる前に、 HTTPサーバを動かすための必要最低限の設定をhttpd.confに行います。 この設定は一からするのではなく、 付属の標準の設定ファイル httpd.conf.default(とか)に手を加えることで行います。 その設定を挙げると以下の5項目です。

問題のhttpd.confは、UNIX系の場合は/usr/local/etc/apache/に、 Windowsの場合はapacheをインストールしたフォルダの中のconfフォルダにあります。

B.5.1 サーバドメイン

まずは、 サーバのドメインです。 プライベートないしはグローバルネットワーク上にHTTPサーバがある場合はそのドメインを、 スタンドアロンで動かす場合はループバックアドレスを書いておきます。 httpd.confの「ServerName」で始まる行を探してください。 その部分を環境に合わせた名前にします。

(設定例)
ServerName 127.0.0.1
(↑DNSを使わない場合)
ServerName http_server.domain.organization.country
(↑どこかのドメインに属している場合)

B.5.2 管理者のメールアドレス

管理者のメールアドレスのエントリがあります。 httpd.confの「ServerAdmin」で始まる行で探してください。 その部分を環境に合わせた名前にするか、 apacheからメールは送らない場合はコメントアウトします。 行頭に # をつけることで、そのエントリを向こうにすることができます。

(設定例)
# ServerAdmin admin@domain.organization.country
(↑コメントアウトした場合)

B.5.3 公開可能なディレクトリ

次に、 apacheが見せるhtmlファイルをディレクトリの場所を記述します。 これはhttpd.confの「DocumentRoot」のエントリに対応します。 /usr/local/share/doc/index.htmlのファイルが表示される設定例を挙げます。

(設定例)
DocumentRoot "/usr/local/share/doc/"

と設定すると、 /usr/local/share/docのフォルダ以下がapacheによって表示されます。 この設定例の場合、

http://127.0.0.1/index.html

ちょうど、 http://127.0.0.1/の部分が、 DocumentRootで指定したディレクトリに置き換わったパス/usr/local/share/docになります。

B.5.4 標準のアクセス制限

個人でHTTPサーバを立てた場合、 実はPPPやISDNでプロバイダから得たIPアドレスを用いて、 自分のサーバの中のファイルを読めてしまいます。 ファイルを読める場合でも十分危険だけれども、 それ以上に危険なのは、 テスト段階のCGIプログラムを不用意に実行できることでしょう。 従って、アクセス制限を行う必要があります。

アクセス制限は、 クライアントホストからの要求を受付けるか、 拒否するかで行います。 CGIプログラムのテストのために個人でapacheを導入した場合、 自分のホストからの要求だけ受付けるように設定します。

標準のアクセス制限(そのホストのデフォルトの設定)は、 <Directory />〜</Directory>のセクションで行います。 httpd.confの<Directory />を探します。 下記の設定例では、そのホストからの要求だけ受付けて、他はすべて拒否します。

(設定例)
<Directory />
    Deny from all
    ↑全ホストからの要求を弾く
    Allow from 127.0.0.1
    ↑自分のホストからの要求を受付ける
    Allow from 192.168.0.13
    ↑192.168.0.13の要求だけ受付ける
</Directory>

なお、 複数のホストから要求を受付ける場合は、 Allow from の行を増やすだけです。

B.5.5 ログの管理方法

ログの管理方法についてのエントリは、 ErrorLogとCustomLogにあります。

apacheは自動的にエラーやクライアントのアクセスを記録します。 エラーについて記録する方法を記述するのがErrorLogエントリ、 クライアントのアクセスを記録する方法を記述するのがCustomLogのエントリです。

標準の設定では、 エラーの記録は /var/log/httpd-error.log に、 アクセスの記録は /var/log/httpd-access.log のファイルです。

個人でこのポリシーで記録をつけるのはさほど問題はありません。 しかし、 この方法では、 ログファイルがすぐに大きくなるので、 自動的にログをつけるファイルを変えた方が良いと思います。

apacheのログファイルを自動的に換えるプログラムが rotatelogs です。 このプログラムはapacheのツールの一つです。 ただし、Windows版には入っていません。 rotatelogsの引数はログファイル名とログファイルを換える周期(秒)です。 下記の設定例の場合、エラーログは、 「httpd_error_log.記録開始時刻」というファイルになります。 ファイル名は周期毎に変ります。

(設定例)
ErrorLog "|rotatelogs /var/log/httpd_error_log 86400"
↑httpd_error_logで始まるファイルに1日(86400秒)毎につける
CustomLog /var/log/httpd_access_log
↑httpd_access_logというファイルにログを取り続ける

なお、 ErrorLogとCustomLogのエントリをコメントアウトすると、 ログをつけなくなります。

B.6 CGIプログラムを動かす上での設定

CGIプログラムを設定は、 標準アクセス制限の中に書きます。 設定するのは二つです。 ひとつは、CGIプログラムを指定する拡張子です。 もう一つは、CGIプログラムの実行を有効にする指定です。

(設定例)
<Directory />
    AddHandler cgi-script .cgi
    ↑.cgiで終るファイルはCGIプログラムとして扱う
    Options ExecCGI
    ↑CGIプログラムを実行を有効にする
</Directory>

B.7 動作テスト

いよいよ動作テストです。

UNIX版のapacheの起動や設定ファイルの文法の確認は、 apachectlというコマンドを用います。

(コマンド)
# /usr/local/sbin/apachectl configtest
↑httpd.confの文法の確認
Syntax OK
↑apachectlの出力
# /usr/local/sbin/apachectl start
↑apacheの起動

Windows版のapacheの起動コマンドは、 apache.exeです。 これはapacheをインストールしたフォルダに入っています。

HTTPサーバが起動したら、 ブラウザを使ってページを見てみましょう。 A.5.1 の設定では、URLは、 「http://127.0.0.1/」あるいは「http://localhost/」です。 「file:/〜」ではありません。 このURLの指定の仕方はUNIX版でもWindows版でも同じです。

CGIのテストは hello,world を表示するプログラムを実行させましょう。 A.5.3の設定例では、 公開可能なディレクトリの指定が /usr/local/share/doc ですので、 この中に一時的に CGI プログラム(ファイル名:hello_world.cgi)を入れ、 ブラウザから、 http://127.0.0.1/hello_world.cgi を開いてみましょう。 きちんと表示されていない場合、 hello_worldのプログラム (はじめに"content-type: text/html\n\n"を出力していないとか)か、 apacheの設定に原因があります。

C言語で作るCGI入門の目次へ
ホームページへ