第4回 Apache+PostgreSQL+Rubyで作るWebアプリケーションサーバ

その1:Apacheのインストール

2002/05/12



Webサーバとして定評のあるApacheとフリーのデータベースサーバなのに高性能なPostgreSQLに初心者にも使いやすいスクリプト言語のRubyを使ったWebアプリケーションサーバの作り方です。
とてもいい加減ですが、メッセージのやりとりの流れを書いてみました。
そのうちUMLで書き直したいです。

ApacheとPostgreSQLは直接メッセージのやりとりはできないのでrubyが仲介します。
Apacheのモジュールで直接SQLをさわるものもあるようですが、使い方がよくわかんないので手つかずです。

Rubyはpostgresのライブラリを使ってPostgreSQLにアクセスします。
Rubyは文字列処理には定評があるのでCGIにはうってつけです。
したがって、CGI関連の補助機能が多く存在します。
デフォルトで利用できるCGIライブラリや日本語のエンコード変換をするnkfライブラリやjcodeに加え、HTML文書やテキスト文章にタグを埋め込みRubyスクリプトを呼び出すことができるeRubyやApacheにモジュールとして組み込むことでRubyやeRubyを使って動的にページ生成することができるmod_rubyなどがプログラマの手助けをしてくれます。


1.Apacheのインストール

はじめは簡単なところで、Apacheのインストールをします。
ここではApacheとmod_soを有効にするところまでです。最終的にはmod_rubyを組み込みますがそれはeRubyを導入後になります。
ちなみにmod_soをインストールしないとmod_rubyがうまく入ってくれません。
mod_soを入れるとAPXSが入って、Apacheがメモリ内で動的にページの生成をしてくれます。mod_rubyに限らず、phpやtomcat(mod_jk)を入れるときも必要になると思います。
CGIだとスクリプトが別プロセスで立ち上がってきますが、Apacheに組み込まれることでスレッドとして処理されるので高速に動作するのが特徴です。
Apacheをインストールするにあたり、まずソースからインストールすることにします。
もしかしたらはじめから入っているかもしれませんが、mod_soが入っていない可能性があるので注意してください。
Apacheの公式サイトなどからApacheのソースを入手します。現在Apache2が出ていますが、まだApache2での動作は確認していません。ここでは、apache1.3.24を前提にしています。(Apache1.3.24にはセキュリティホールが存在するのでなるべく最新版を使ってください)
まずはソースを展開します。
% tar zxvf apache_1.3.24.tar.gz
configureをかけますが、はじめに"--help"オプションを付けてデフォルトで入れられるモジュールを確認してみます。
% cd apache_1.3.24
% ./configure --help
〜省略〜
--enable-module=NAME enable a particular Module named 'NAME'
--disable-module=NAME disable a particular Module named 'NAME'
[access=yes actions=yes alias=yes ]
[asis=yes auth=yes auth_anon=no ]
[auth_db=no auth_dbm=no auth_digest=no ]
[autoindex=yes cern_meta=no cgi=yes ]
[digest=no dir=yes env=yes ]
[example=no expires=no headers=no ]
[imap=yes include=yes info=no ]
[log_agent=no log_config=yes log_referer=no ]
[mime=yes mime_magic=no mmap_static=no ]
[negotiation=yes proxy=no rewrite=no ]
[setenvif=yes so=no speling=no ]
[status=yes unique_id=no userdir=yes ]
[usertrack=no vhost_alias=no ]
〜省略〜
%
デフォルトのモジュールだけでもこんなにあります。
肝心のmod_soはデフォルトでは使われないのでconfigureのオプションに加えてあげましょう。
また、いらないモジュールはApacheの動作が重くなるだけなので不必要なものは無効にします。
それぞれのモジュールの説明はApacheのサイトのここにあります。
デフォルトだといろいろまずいことがあるので、変更することをおすすめします。
以下は、mod_soとmod_usertrackを有効にし、mod_autoindexとmod_userdirとmod_imapを無効にしてあります。Cookieを使う予定があるのであればmod_usertrackが必要になります。
特にmod_autoindexはセキュリティ上好ましくないので無効にすることをおすすめします。
% ./configure --enable-module=so --enable-module=usertrack \
--disable-module=userdir --disable-module=imap \
--disable-module=autoindex
% make
% su
password
# make install
ついでにmakeとmake installをかけます。
インストールが完了したら、モジュールがちゃんと入ったか確認してみましょう。
httpdに"-l"(小文字のエル)オプションを付けます
# /usr/local/apache/bin/httpd -l
Compiled-in modules:
http_core.c
〜省略〜
mod_so.c
〜省略〜
こんな感じでmod_soが入っていればOKです。
あとは起動してみます。
# /usr/local/apache/bin/apachectl start
/usr/local/apache/bin/apachectl start: httpd started
メッセージが出たらインストール成功です。
ちなみに止めるときは、startをstopに変えます。
他にもいろいろオプションがあります。apachectl helpで調べてみましょう。
# /usr/local/apache/bin/apachectl stop
/usr/local/apache/bin/apachectl start: httpd stopped
あと、起動時に自動的にApacheが立ち上がるようにrcファイルを編集します。
面倒なのでrc.localに追加します。
リダイレクトを間違えるとひどい目に会いますので注意しましょう。
# echo "/usr/local/apache/bin/apachectl start" >> /etc/rc.local
ものぐさなのでワンライナーで処理していますが、ちゃんとviなどでrc.localを開いてコメントも付けてあげるともっといいと思います。

2.httpd.confの編集

インストールは完了しました。
Apacheのコンフィグファイルはhttpd.confになっています。実は、このファイルはなにも変更を加えなくてもとりあえずサーバは立ち上がってきます。ですが、一応変更を加えておきましょう。
最終的にmod_rubyのインストールが完了した時点でhttpd.confを書き直さなければいけませんが、ここでは基本的なApacheのコンフィグファイルの書き方について説明しておきます。
コンフィグファイルはデフォルトでインストールした場合/usr/local/apache/confの中に置きます。
そこにhttpd.conf.defaultがあるので、これを編集して、httpd.confにします。
まずはファイルをコピーして編集します。viを使っていますが、eeでもemacsでもかまいません。
# cd /usr/local/apache/conf
# cp httpd.conf.default httpd.conf
# vi httpd.conf
とりあえずの編集箇所は以下の通りです。
他にもいろいろあります。詳しくはマニュアルで確認してみてください。
(1)重要度高
○258行目くらい
ServerAdmin webmaster@yourdomain
○276行目くらい
ServerName www.yourdomain
(2)重要度中
○250行目くらい ---(注1)
User apache
Group apache
デフォルトはnobody:nogroupですが、
セキュリティを考えて変更したほうがベター
○283行目くらい
DocumentRoot "xxxxx"
ドキュメントファイルの位置を変更したい場合は変更
○458行目あたり
ログファイル関連は/varに移した方がいいでしょう
編集が終わったらapacheを立ち上げてみましょう。
もし、apacheが既に立ち上がっているようでしたらいったんstopさせてからstartさせるか、restartをかけます。
エラーメッセージが出なかったらOKです。
念のためプロセスが上がっているか確認します。
# ps ax | grep httpd
455 ?? Ss 0:01.09 /usr/local/apache/bin/httpd
456 ?? I 0:00.30 /usr/local/apache/bin/httpd
457 ?? I 0:00.30 /usr/local/apache/bin/httpd
458 ?? I 0:00.04 /usr/local/apache/bin/httpd
459 ?? I 0:00.04 /usr/local/apache/bin/httpd
460 ?? I 0:00.04 /usr/local/apache/bin/httpd
462 ?? I 0:01.11 /usr/local/apache/bin/httpd
463 ?? I 0:00.04 /usr/local/apache/bin/httpd
552 p0 S+ 0:00.01 grep httpd
こんな感じでプロセスがちゃんと起動されていればOKです。
ちなみにpid455がapacheの親プロセスで、これを止めると他の子プロセスが死んでしまいます。
ブラウザでもちゃんと見られるか確認してみましょう。
(注1)
Apache用のユーザとグループを作るときの注意です。
万が一Apacheプロセスが悪意のあるユーザに乗っ取られたとき、悪意のあるユーザはとりあえずnobody:nogroupで何かをしようと試みます。
nobody:nogroupはデフォルトで入っているユーザなので他にもnobody:nogroupを使用するプログラムがあるかもしれません。悪意のあるユーザはそういったプログラムに対して何らかのアプローチを試みるかもしれません。
なので、nobody:nogroupからapache:apacheに変更します。
以下の手順でapacheグループとapacheユーザを作ります。
グループIDとユーザIDを80にしています。
もし、今使っているシステムで80が使用中の場合は他の番号に変更してください。
/etc/passwdみるとわかると思いますが、daemon起動用のユーザ名ってポート番号と統一しているみたいなんです。httpは80番なので80にしただけです。
# pw groupadd apache-g 80
# pw useradd apache-g 80 -u 80-d /usr/local/apache -s /sbin/nologin
言い忘れましたが、これはFreeBSDでのコマンドです。
これはグループ・ユーザ作成方法の一例です。
もちろんgroupやpasswdを直接変更してもいいですし、sysinstallから作っても問題ないです。
<課題>
○今回は紹介しませんでしたが、httpsを使う場合はsslのパッチをあてたりsslを導入しなければいけません。
○mod_devとかの面白い技術もあります。
○jakarta-antやjakarta-tomcatを動かしてみるのも楽しいと思います。
○./configureのオプションについてもう少し詳しく説明すればよかった。
○httpd.confの説明をもう少し書けばよかった。

<参考文献>

SoftwareDesign 2000年3月号 ApacheによるWebサーバチューニング 技術評論社
JAPAN APACHE USERS GROUP http://www.apache.jp
同メーリングリストアーカイブ http://mm.apache.or.jp/mailman/namazu.cgi


もどる