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ユーザーの方にはまったく参考にならないかも知れないけれど....)
Macintosh用のFTPファイル転送ソフト。シェエウェア。日本語版公式ホームページはこちら。
Mac用のSSHクライアント。
サーバの保守管理は、サーバのコンソールではなく、LANで接続されたMacから、MacSSHを使って行っている。簡単にログがとれるので、作業内容をあとから容易に確認できる。公式ホームページはこちら。使い方については、ここが参考になると思う。
Mac用のテキストエディタ。フリーウェア。サーバの保守管理のみならず、ほとんどの"作文"は、このソフトを使っている。サクサク動いて、非常に快適である。
FreeBSDの設定ファイルの編集は、vi等を使うのが正統派のやり方かも知れないけれど、私は、NuEditで作成したあと、Fetchを使ってサーバに転送する方法をとっている。作者のサイトは、こちら。
近所の書店で見つけた本が参考になった。と言うより、この本に書いてあるとおりにやったら、(たまたま)うまくいったというのが本当のところである。従って、正確には、参考書と言うより教科書と呼ぶべきであろう。
記述は平易かつ丁寧で、ごく基本的なUNIXの知識があれば、私のようなアマチュアにもじゅうぶん理解できた。ソースファイルを納めたCD
ROMがついているのも都合がいい。
ステップ式サーバ構築入門 著者:小沼佳洋 発行所:(株)技術評論社 定価: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
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_agentとmod_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_agentとmod_log_refererを追加するので、次のようなパラメータをつけてconfigureスクリプトを実行する。
$ ./configure --enable-module=log_agent --enable-module=log_referer
このあとの手順は、"インストール"の項で解説したとおりである。
$ make
$
su
Password:XXXXXXX
# make install
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に記述されたもののままでとりあえずは大丈夫らしい。
Webサイトのコンテンツを置く場所。たとえば、/usr/local/websiteというディレクトリに置くならば、次のように記述する。
DocumentRoot "/usr/local/website"
ディレクトリのみを指定したとき、デフォルトで表示させるファイルの名前。
DocumentRoot "/usr/local/website"
DirectoryIndex index.htm
と記述すれば、あなたのサーバにアクセスがあった場合(例えば、http://www.yourserver.com)、次のドキュメントがブラウザに表示されることになる。
/usr/local/website/index.htm
管理者のメールアドレスを記述する。サーバに異常があった場合、通知のメールが届く。
ServerAdmin namae@yourserver.com
のように記述する。
アクセスログの出力先。
自前のサーバを公開するメリットのひとつは、詳細なアクセスログを簡単に取得できることであろうと思う。いつ、誰が、どのページを見たのか、サーバのオーナーにはすべてわかるのである。
デフォルト(ソースファイルからインストールした場合)では、/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_agentとmod_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 /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日 修正