FreeBSD(98) Apache導入のまとめ

 Apacheは、現在もっとも広く使われている(のではないかと思われる)httpdサーバソフトウェアである。
 いまご覧になっているこのページも、実はApacheか稼働している我が家のサーバから送りだされているわけだが、今回、FreeBSD(98) 4.7R Rev01を新規インストールしたのを機会に、再度最新のApache(1.3.26)を導入することにした。
 私はコンピュータの専門家ではないので、"なぜ、そうするのか?"と訊かれると分からないことも多いのだけれど、とにかく、Apache導入までの道のりを紹介したい。同好の士の方々の参考になれば幸いである。

サーバマシン

 Apacheをインストールするサーバのスペックは、下記のとおりである。

 FreeBSD(98)は、外付けHDDにインストールしてある。

クライアントマシン

 私はMacintoshユーザーである。最新のMacOSXはFreeBSDがベースなので、FreeBSD(98)との親和性が極めて良好らしいが、これまで買い揃えてきたアプリケーションソフトの買い替えに多額の費用を要しそうなので、未だにMacOS 9.2を使用している。

 FreeBSD(98)サーバの保守管理に使っている便利なソフトを紹介しておく。(Windowsユーザーの方にはまったく参考にならないかも知れないけれど....)

Fetch 3.0.3J2

 Macintosh用のFTPファイル転送ソフト。シェエウェア。日本語版公式ホームページはこちら

MacSSH

 Mac用のSSHクライアント。
 サーバの保守管理は、サーバのコンソールではなく、LANで接続されたMacから、MacSSHを使って行っている。簡単にログがとれるので、作業内容をあとから容易に確認できる。公式ホームページはこちら。使い方については、ここが参考になると思う。

NuEdit1.5

 Mac用のテキストエディタ。フリーウェア。サーバの保守管理のみならず、ほとんどの"作文"は、このソフトを使っている。サクサク動いて、非常に快適である。
 FreeBSDの設定ファイルの編集は、vi等を使うのが正統派のやり方かも知れないけれど、私は、NuEditで作成したあと、Fetchを使ってサーバに転送する方法をとっている。作者のサイトは、こちら

参考書

 近所の書店で見つけた本が参考になった。と言うより、この本に書いてあるとおりにやったら、(たまたま)うまくいったというのが本当のところである。従って、正確には、参考書と言うより教科書と呼ぶべきであろう。
 記述は平易かつ丁寧で、ごく基本的なUNIXの知識があれば、私のようなアマチュアにもじゅうぶん理解できた。ソースファイルを納めたCD ROMがついているのも都合がいい。

 

ステップ式サーバ構築入門
はじめてのApache

著者:小沼佳洋

発行所:(株)技術評論社

定価:2,480円+税

ISBN4-7741-1529-0 C3055

インストール

ソースファイルの準備

 FreeBSDの場合、Portsやpackagesを利用するのがお手軽であるが、私は勉強をかねてソースファイルから新規インストールすることにした。
 前述の参考書の付属CDにapache_1.3.26.tar.gzが収録されているので、これを適当なディレクトリに展開する。

 インストールするマシンにCD ROMをマウントするのが正当な(?)方法であるが、私は例によってFetchを使ってMacからFTPで転送した。

ソースファイルの展開

 圧縮されたソースファイルがあるディレクトリに移り、tarを使ってファイルを解凍する。(赤字は、あなたがコンソールから入力する文字である。以下同じ。)

$ tar xzvf apache_1.3.26.tar.gz

 すると、"apache_1.3.26"というディレクトリが作成されるので、そちらに移る。

$ cd apache_1.3.26

configureスクリプト実行

 Apche1.3の場合、一般ユーザーのままでconfigureを行うと、ポート番号が変更されてしまうらしい。そこで、ポート番号として80を指定する。

$ ./configure --with-port=80

 何やらメッセージが表示されて、再びプロンプトが出るのを待つ。

コンパイルとインストール

 まず、makeコマンドを実行。

$ make

 ついで、root権限に移行したあと、インストール。

$ su
Password:
XXXXXXX
#
make install

 これでおしまい。心配されたエラーは出ず、あっけないほど簡単であった。

試運転

 インストールが終わったら、早速起動してみる。

# /usr/local/apache/bin/apachectl start
/usr/local/apache/bin/apachectl start: httpd started
#

 これで、マシンはhttpdサーバとして稼働しているはずである。Macで適当なブラウザを起動し、サーバのIPアドレスを入力してアクセスしてみるとよい。デフォルトのページが表示されたら、大成功である。

 この例からもわかるとおり、Apacheの起動/停止/再起動は、apachectlスクリプトを使う。すなわち、root権限で、次のようにすればよい。
 なお、ソースファイルからインストールした場合と、Portsやpackagesを利用した場合とでは、apachectlが置かれるディレクトリが異なっている。Portsやpackagesを利用した場合はカッコ内のようにする。

起動

# /usr/local/apache/bin/apachectl start

(# /usr/local/sbin/apachectl start)

停止

# /usr/local/apache/bin/apachectl stop

(# /usr/local/sbin/apachectl stop)

再起動

# /usr/local/apache/bin/apachectl restart

(# /usr/local/sbin/apachectl restart)

モジュールの追加

 モジュールとは、『Apacheで使用することができる機能群』(前述の参考書)だそうである。私のようにソースファイルからインストールした場合は、Apacheを再コンパイルして必要なモジュールを組み込むのが良いらしい。

 主なモジュールの名前と機能は、参考書のp155に記載されている。全容は到底理解できないが、私の場合、詳細なアクセスログを取得するために、mod_log_agentmod_log_refererという2つのモジュールを組み込む必要に迫られた。

 そこで、その手順を述べる。ディレクトリ等は、ソースファイルからインストールした場合の例であるので、注意されたい。

モジュールの確認

 Apacheが起動している場合は、前述の方法で一旦サービスを停止する。

 次いで、root権限で次のようにする。

# /usr/local/apache/bin/httpd -l

 すると、

Compiled-in modules:
http_core.c
mod_env.c
mod_log_config.c
mod_mime.c
mod_negotiation.c
mod_status.c
mod_include.c
mod_autoindex.c
mod_dir.c
mod_cgi.c
mod_asis.c
mod_imap.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_access.c
mod_auth.c
mod_setenvif.c

 のように、その時点で組み込まれているモジュールが表示される。

モジュールの追加とコンパイル&インストール

 ソースファイルが展開されたディレクトリに移る。今回はmod_log_agentmod_log_refererを追加するので、次のようなパラメータをつけてconfigureスクリプトを実行する。

$ ./configure --enable-module=log_agent --enable-module=log_referer

 このあとの手順は、"インストール"の項で解説したとおりである。

$ make

$ su
Password:
XXXXXXX
#
make install

httpd.confについて

 httpd.confは、Apacheの動作を決定する重要な設定ファイルである。

 これも、ソースファイルからインストールした場合とPortsやpackagesを利用した場合とでは、格納場所が異なる。

 httpd.confの置かれた場所に、"ひながた"(httpd.conf.default)が置かれているので、これを改変してオリジナルのhttpd.confを作成すると良い。
 つまり、httpd.conf.defaultを適宜編集し、httpd.confとして/usr/local/apache/conf/置けばよい訳だ。なお、httpd.confを更新した場合、Apacheを再起動してやる必要がある。

 httpd.confの詳細を紹介することは、悪意をもつ人たちに、このサーバの弱点を晒すようなものでもある。そんな訳で、私が作成したhttpd.confの全容を紹介することは避け、自前のhttpdサーバを稼働させるうえで最低限必要な設定を述べる。他の項目は、httpd.conf.defaultに記述されたもののままでとりあえずは大丈夫らしい。

DocumentRoot

 Webサイトのコンテンツを置く場所。たとえば、/usr/local/websiteというディレクトリに置くならば、次のように記述する。

DocumentRoot "/usr/local/website"

DirectoryIndex

 ディレクトリのみを指定したとき、デフォルトで表示させるファイルの名前。

DocumentRoot "/usr/local/website"
DirectoryIndex index.htm

 と記述すれば、あなたのサーバにアクセスがあった場合(例えば、http://www.yourserver.com)、次のドキュメントがブラウザに表示されることになる。

/usr/local/website/index.htm

ServerAdmin

 管理者のメールアドレスを記述する。サーバに異常があった場合、通知のメールが届く。

ServerAdmin namae@yourserver.com

 のように記述する。

CustomLog

 アクセスログの出力先。

 自前のサーバを公開するメリットのひとつは、詳細なアクセスログを簡単に取得できることであろうと思う。いつ、誰が、どのページを見たのか、サーバのオーナーにはすべてわかるのである。

 デフォルト(ソースファイルからインストールした場合)では、/usr/local/apache/logsというディレクトリにaccess_logという名前のログが記録されることになっている。詳細なログを記録する場合は、combinedとする。
 たとえば、

CustomLog /usr/local/apache/logs/access_log combined

 とすればよい。

 combinedを指定したときの書式は、

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

 で定義されている。

 この場合、具体的に書くと、

yahoobb123456789012.bbtec.net - - [13/Mar/2003:20:41:29 +0900] "GET /hiroto/RFY_LAB/freebsd/98data.htm HTTP/1.1" 200 40039 "http://www.google.com/search?num=50&hl=ja&ie=UTF-8&oe=UTF-8&newwindow=1&q=%E3%82%B8%E3%83%A3%E3%83%B3%E3%83%91%E3%80%80LA%2FT-98+&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja" "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; T312461)"

 のようなログが得られる。(ただし、前述のごとく、mod_log_agentmod_log_refererの2つのモジュールを組み込んでおく必要がある。また、httpd.confの中に、HostnameLookups Onの記述が必要。)

 このログの解釈は、つぎのとおり。

yahoobb123456789012.bbtec.net : リモートホスト名
[13/Mar/2003:20:41:29 +0900] : 時刻
"GET /hiroto/RFY_LAB/freebsd/98data.htm HTTP/1.1" : リクエストの最初の行
200 : リクエストに対するステータス
40039 : 送信したbyte数
"http://www.google.com/search?num=50&hl=ja&ie=UTF-8&oe=UTF-8&newwindow=1&q=%E3%82%B8%E3%83%A3%E3%83%B3%E3%83%91%E3%80%80LA%2FT-98+&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja" : (やたら長ったらしいが)どこからこのページをアクセスしたか
"Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; T312461)" : 使用しているブラウザの名前

 httpdサーバを公開した場合、当初は1日数十Kbyte程度のログしかできないだろうが、あなたのサイトの人気が出るにつれて、ログファイルは加速度的に大きくなっていく。たとえば、現在、私のサーバには、1日あたり500〜1000Kbyte程度のログが残る。1週間で約5Mbyte、1か月では約20Mbyteであり、これだけ巨大なファイルになると、あとで閲覧するのも一苦労である。

 そこで、httpd.confのなかに次のように記述すると、毎日別の名前のログファイルを作成してくれるので便利である。(ソースファイルからインストールした場合)

CustomLog '|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log 86400' combined

*1:"86400"は、新しくファイルを作る間隔。単位:秒。60[秒/分]×60[分/時間]×24[時間/日]=86400である。
*2:Portsやpackagesを利用した場合は、"CustomLog '|/usr/local/sbin/rotatelogs /var/log/access.log 86400' combined"。

 なお、詳細なログを残そうとすると、Apacheの反応が鈍くなったり、また、セキュリティーホールになることもあるそうなので、その設定にあたっては、十分な検討を加える必要がある。

ErrorLog

 エラーログの出力先。

ErrorLog /usr/local/apache/logs/error_log

 CustomLogの場合と同じく、次のように記述すれば、毎日別のファイルができる。

ErrorLog '|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/error_log 86400'

*3:Portsやpackagesを利用した場合は、"ErrorLog '|/usr/local/sbin/rotatelogs /var/log/error.log 86400'"。

 ここに記載した内容は、私が独自に調査したものが含まれます。結果については責任を負いかねますので、あなたの自己責任でご利用ください。

戻る


Copyright by Heian Software Engineering (C)H.S.E. 2003 Allrights reserved.
2003年3月13日 制作 2003年3月13日 修正