[index] [bottom]

Debianでapache2を設定する

apache2をインストール(選択)する。

Debianなので、apt-getほにゃららでよいのですが、apache2というパッケージは仮想パッケージとしてしか存在しません。次の中から、使用するモジュールを選ばなければなりません。

apache2-mpm-prefork

古いapache1.xと同じように、ネットワークコネクション毎にプロセスを割り当てて、処理を行います。パッケージの説明を見る限り、テストされているのはこのモジュールだけ!のようなので、特に問題なければ、このパッケージを使うと良いでしょう。

特にkernel2.4以下でapache2を使う場合、以下に紹介するモジュールで利用しているスレッドとプロセスの違いが無いので、このモジュール以外を選択しても、あまり意味がありません。

また、apacheから実行される処理の中で、スレッドセーフではないライブラリを使っている場合は、このモジュールを選択する必要があります。

一定の数のプロセスが、事前に起動されて待機しているので、パフォーマンスが悪くない代わりに、搭載する物理メモリが少ないマシンでは、"一定の数"をデフォルトから変更する必要があるかもしれません。

apache2-mpm-worker

プロセスの生成や切り替えには大きなコストがかかるので、プロセスではなくスレッドを、ネットワークコネクション毎に割り当てるプログラミングモデルです。

単純なマルチスレッドではなく、多くのスレッドを持つ複数のプロセスで、構成されているようです。こんなサーバを設計させられたら、悪い夢を見そうです(汗)。

kernel2.6でapache2を使う場合、kernel2.4に比べて圧倒的にスレッドの処理が効率化している(スレッドの生成だけを行う簡単なプログラムで実験してみると、1000倍以上の高効率です)ので、このモジュールを使う意味があります。

但し、プログラムを作る立場からいわせてもらえば、マルチスレッドは使わなくて良ければ、使いたくないプログラミングモデルなので(テストが非常に難しいので)、安定性に難があるかもしれません。

特に、開発に携わる技術者すべてが、マルチスレッドに熟練していれば良いのですが、「スレッドなんかよく分からないよ」などという人間が一人でもいると、地獄です(笑)。

2.0.39以降は、apache2-mpm-threadpoolの機能の一部が、このモジュールに組み込まれています。スレッドプールが、実装されたということでしょうか?(不安定になったということじゃないよね)。

apache2-mpm-threadpool

実験的なモジュールなので、人柱(笑)以外は使うべきではありません。

apache2-mpm-perchild

よく分かりません。「異なるホストを異なるユーザ ID で動作させる」ということらしいです?

サーバの設定を行う

apache1.xとは、ずいぶんその設定方法が異なります。httpd.confは、0バイトのダミーファイルとなってしまいました。実際の設定ファイルは、/etc/apache2/apache2.confです。

日本語を正しく表示できるようにする。

インストールした段階では、ドキュメントの指定に関わらず、webサーバ(apache)がコンテンツヘッダで、言語の指定を行うようになっています。これは、最近のapache1.xも同様で、デフォルトでは、ISO-8859-1(Latin-1:ASCII文字に、ウムラウトがついたアルファベットをなどを含む、8ビット拡張を行ったキャラクタセット)となっています。

本来は、xxx.htmlの後ろに言語コードをつけて、xxx.html.ja.jisなどとすべきなのでしょうが、一般的では無いので、

/etc/apache2/apache2.conf
AddDefaultCharset	ISO-8859-1

を、次のようにoffとします。

/etc/apache2/apache2.conf
AddDefaultCharset	off

ユーザディレクトリを有効にする。

apache2.confで次の4行を探し、コメントをはずします。

/etc/apache2/apache2.conf
<Directory /home/*/public_html>
    AllowOverride FileInfo AuthConfig Limit
    Options Indexes SymLinksIfOwnerMatch IncludesNoExec
</Directory>

これで、ユーザディレクトリのpublic_htmlディレクトリ以下のドキュメントを、http://host/~user/xxx.htmlなどで、参照できるようになる。もちろん、ユーザディレクトリが/home以下にないような場合は、設定は異なりますが。

CGIを有効にする。

apache1.xとは、ずいぶんその設定方法が異なります。apache2.confで次の箇所を探し、コメントをはずします。

/etc/apache2/apache2.conf
AddHandler cgi-script .cgi

.cgi以外の拡張子で、cgiのスクリプトを作成する場合は、次のように拡張子を追加します。

/etc/apache2/apache2.conf
AddHandler cgi-script .cgi pl

/etc/apache2/mods-available/から、/etc/apache2/mods-enabled/へ、設定ファイルのシンボリックリンクを張ります。

マルチスレッド版のMPM(apache2-mpm-worker)を使っている場合は、cgid.loadとcgid.confにリンクを張ります。

コマンド
# cd mods-enabled/
# ln -s ../mods-available/cgid.conf .
# ln -s ../mods-available/cgid.load .

こんな感じです。

マルチプロセス版のMPM(apache2-mpm-prefork)を使っている場合は、cgi.loadにリンクを張ります。

コマンド
# cd mods-enabled/
# ln -s ../mods-available/cgi.load .

CGIを有効にするディレクトリを指定します。/etc/apache2/conf.d/に、適当なファイルを作成し、この中に設定を記述すれば、ロード時にその内容が反映される仕組みです。

コマンド
# cd conf.d/
# vi cgiload
/etc/apache2/conf.d/cgiload
<Directory /home/*/public_html/cgi-bin/>
Options ExecCGI
</Directory>

上記の設定で、ユーザディレクトリの/cgi-bin/以下で、CGIが利用できるようになります。

apacheを再起動します。

コマンド
# /etc/init.d/apache2 restart
[index] [top]