WWW サーバを作るために、Apache2 をインストールします。 ここでは、ソースを持って来てコンパイルする方法を取ります。 この記述は、Apache のバージョン 2 系統である httpd-2.0.39 [2002/06/17リリース]をもとにしています。
なお、httpd-2.0.36 以前のバージョンには セキュリティーホールが発見されています。
用意するもの
まず、httpd-2.0.39.tar.gz と httpd-2.0.39.tar.gz.md5 を適当なサイトから入手します。 日本語のサイト に Apache をダウンロードできるサイト一覧 があります。 入手したら、MD5 をチェックしてから、適当な場所に展開します。
% cd /somewhere
% cat httpd-2.0.39.tar.gz.md5
MD5 (apache-2.0.39.tar.gz) = ...................
% md5 httpd-2.0.39.tar.gz
MD5 (apache-2.0.39.tar.gz) = ................... (上の md5 と一致しているかチェック)
% zcat /somewhere/httpd-2.0.39.tar.gz | tar -xf -
% cd httpd-2.0.39
次に、configure をします。 cinfigure のオプションの詳細は INSTALL に書いてありますが、 ここではコンパイラとインストール先のみ指定します。
% setenv CC /usr/bin/gcc (この設定をやるとうまくいかない場合があります)
% ./configure --prefix=PREFIX
PREFIX は、お好きな場所を指定します。 例えば、./configure --prefix=/usr/local/lib/apache など。 デフォルトは、PREFIX=/usr/local/apache2 です。
FreeBSD では、threads というものが使えないかもしれないので、 threads を使いたい場合は --enable-threads を追加しておきます。
make して make install します。
% make
% su
Password:
# make install
インストールはすべて上の PREFIX で指定されたディレクトリ以下に されます。インストールされた後の状況は以下の通り。
% ls -F PREFIX
bin/ build/ cgi-bin/ conf/ error/ htdocs/ icons/ include/ lib/ logs/ man/ manual/ modules/
マニュアル man も PREFIX に入っています。 これを man コマンドで見られるように、/etc/manpath.config に 次の2行を追加しておきます。
/etc/manpath.config
MANDATORY_MANPATH PREFIX/man
MANPATH_MAP PREFIX/bin PREFIX/man
Apache が動くかどうか、テストします。
# PREFIX/bin/apachectl start
ローカルホストで、http://localhost/ にアクセスしてみます。 これで、PREFIX/htdocs を読みに行けば成功です。
トラブルシューティング
- conf/httpd.conf の266行目で Group が "#-1" になっていると httpd がうまく立ち上がらない事があります。 "#-1" を nobody に変更してからやり直します。
古いバージョンでは conf/{access.conf,srm.conf} も使われいたようです が、version 2.0.39 では混乱を避けるためほとんどすべての記述を conf/httpd.conf に書くようになっています。さて、conf/httpd.conf で設定しなければならないことは、 主に次の項目でしょうか。 詳細は、conf/httpd.conf をご覧下さい。
([2003/06/06]間違って apache-1.3.22 の行数を書いてたのを訂正しました)
http://x-web.pobox.ne.jp/fcgi/fcgi_f4b.htmlも参考になります。
基本的な設定
- Group ID
(266行目) Group nobody
- サーバ管理者のメールアドレス
(275行目) ServerAdmin admin_name@hogehoge.jp
- WWW サーバの名前もしくは IP アドレスのみ指定された時に 見に行く場所
(305行目) DocumentRoot /homedir/of/httpd
- .htaccess によるアクセス制限をするかどうか
Limit は、IP アドレスによるアクセス制限を行うため、
(317行目) AllowOverride None
→ AllowOverride Limit AuthConfig
AuthConfig はユーザ名とパスワードによるアクセス制限を行うために 設定します。
その他、.htaccess を隠すための設定が 405行目〜408行目にありますが、 バージョン 2.0.39 ではデフォルトで隠すようになっています。
- DocumentRoot で指定したディレクトリへの設定(330〜359行目)
上の .htaccess を有効にするためには、
(330行目) <Directory "/homedir/of/httpd">
(351行目) AllowOverride None
→ AllowOverride Limit AuthConfig
が必要。
- WWW サーバの名前もしくは IP アドレスに続き、 ユーザの名前のみ指定された時に見に行く場所
(365行目) UserDir public_html
- ファイルの名前が省略された場合に見に行くファイル
(392行目) DirectoryIndex index.html
- ログファイルを common 形式ではなく、combined 形式で取りたい場合は、
と変更します。
(501行目) #CustomLog logs/access_log common
(514行目) CustomLog logs/access_log combined
common 形式では access のみの情報となりますが、 combined 形式なら access, agent, referer の情報を含みます。
- access
日時・ホスト・アクセスファイルなど
- agent
相手方ブラウザの名前・バージョン
- referer
どのような語句検索でページに辿り着いたか
UserDir に関する詳しい説明
上の例の場合は、~/public_html を指定したことになります。 こうしておくと、
http://hogehoge.ac.jp/~herohero/public_html/index.html
と指定すべき所を
http://hogehoge.ac.jp/~herohero/index.html
とちょっと楽できます。 もし各ユーザのホームディレクトリ以外を指定したかったら、 絶対パスで書いておけば大丈夫です。例えば、
UserDir /home/of/user
としておくと、
http://hogehoge.ac.jp/home/of/usr/herohero/index.html
と指定すべき所を
http://hogehoge.ac.jp/~herohero/index.html
で良い様に設定したことになります。トラブルシューティング
Apache をアップデートした後で WWW ファイルを見ると 日本語が文字化けすることがあります。 この現象の対処法は ユーザの WWW ページの文字化けについて(対処法) にあります。正しい対処法は、html テキストにキャラクターセットを 指定する方法です。例えば、UNIX の UTF-8 を使っている場合は、 head 部で次のように指定します。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">(英語の場合は "en")
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Apache 側での対処としては、httpd.conf の AddDefaultCharset を いじるといいようです(根拠不明)。 根拠を調べました。デフォルトでは欧米の文字コードに設定されていて、 日本語環境では文字化けをしてしまうのが理由なようです。
AddDefaultCharset ISO-8859-1
→ #AddDefaultCharset ISO-8859-1
- cgi-bin を置くディレクトリ
(557行目) ScriptAlias /cgi-bin/ "/your/directory/of/cgi-bin/"
- cgi-bin を置くディレクトリに対する設定
(571行目) <Directory "/your/directory/of/cgi-bin/">
(572行目) AllowOverride Limit AuthConfig
(573行目) Options ExecCGI
- #AddHandler cgi-script .cgi のコメント「#」を外して CGIスクリプトを実行できるようにする
- #AddHandler send-as-is asis のコメント「#」を外して CGIスクリプトから HTTPヘッダを送れるようにする
- #AddHandler imap-file map のコメント「#」を外して イメージマップが使えるようにする
FreeBSD 5.x では、/usr/local/etc/rc.d/ に実行ファイルを置くだけではだめで、 /etc/rc.conf に起動の呪文を書かないと自動起動しないようです。ちなみに /usr/local/etc/rc.d/ に置いた起動スクリプトは以下のようなものです。
apache2_enable="YES"
このファイルに apache2.sh という名前を付けて実行権を与えておきます。
#!/bin/sh
echo " httpd"
(path to apachectrl)/apachectl start
rc.conf に書くのと、/usr/local/etc/rc.d/ に実行ファイルを置くのの 両方をしないと自動起動しません。
Apache2 を最新版にアップグレードするときの手順は、 次のようになると思います。 以下では、古いものと同じディレクトリにインストールすることを想定しています。
- 古い httpd を止める
- 古いインストールディレクトリを別の名前にしておく
- 新しい apache2 をインストールする
- 古い httpd.conf を参照して新しい httpd.conf を書く
- 新しい httpd.conf をテストする
- logs/* を新しい方の logs/ にコピーする
- 本格的に運用する
/etc/rc.d/init.d/httpd をバックアップしておいて、 bin/apachectl にリンクする。
# cd /etc/rc.d/init.d/httpd
# mv httpd httpd.bak
# ln -s PREFIX/bin/apachectl httpd
なお、PREFIX は configure のときに決めたインストール先の ディレクトリです。