apache-2.2 インストールメモ −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− # 特徴 #--------------------------------------------------------------------------------------------- + 新機能 MPM ---------------------------------------------------------------------------------------------- MPM(Multi Processing Module) とはapache のリクエストを処理する方式を指し、prefork、perchild、w orker 等指定できます。 prefork は従来のapache 1.x 系と同様の動作を行い、下記のような特徴があります。 1. apache 1.x 系以前のモデル 2. 1つのリクエストに対して、1プロセスを割り当てる 3. 負荷に応じて、子プロセスを増減させる prefork で特に重要となる設定は次の通りです。 StartServers 最初に起動する子プロセスの数 MinSpareServers 待機する子プロセスの最小数 MaxSpareServers 待機する子プロセスの最大数 MaxClients 生成する子プロセスの最大数 MaxRequestsPerChild それぞれの子プロセスが扱うリクエスト数の制限数 worker はリクエスト処理をスレッドで行い、下記のような特徴があります。worker は子プロセスを生成した時、リクエスト処理を行うスレッドを指定数分あらかじめ用意するのでリクエストごとにプロセスを生成するprefork に比べるとパフォーマンスがよいと思われます。 1. スレッド対応型 2. リクエスト処理は、スレッドが対応する 3. 負荷に応じて、子プロセス数を増減させる 4. 1子プロセスあたりのスレッド数は固定になっている worker で特に重要となる設定は次の通りです。 StartServers 最初に起動する子プロセスの数 MinSpareThreads アイドル状態のスレッド最小数 MaxSpareThreads アイドル状態のスレッド最大数 MaxClients 生成する子プロセスの最大数 ThreadsPerChild 子プロセスそれぞれに生成されるスレッド数 MaxRequestsPerChild それぞれの子プロセスが扱うリクエスト数の制限数 perchild はworker の反対となる特徴をもっており、プロセス数が固定でスレッド数が増減します。下記のような特徴があります。 1. スレッド対応型 2. リクエスト処理は、スレッドが対応する 3. 負荷に応じて、スレッド数を増減させる 4. 子プロセスの数は固定になっている 子プロセスの生成を待つ必要がなく、スレッドも必要なだけになるため、もっともリソースを有効に使うことができると思われます。 + モジュールの取り扱い ---------------------------------------------------------------------------------------------- apache 1.x 系ではモジュールを組み込むために「AddModule」としていましたが、apache 2.x 系ではapache 自身が適当な順番でモジュールを読み込みます。 # インストール方法 #--------------------------------------------------------------------------------------------- 近年ウェブサーバーは、複数ドメインで運用することが当たり前になっています。そこで、バーチャル環境でかつ、suExec 対応された構築方法を下記に説明します。 バーチャル環境は以下を想定しています。 ・バーチャルドメインごとのディレクトリは全て「/home」以下に構築する ・バーチャルドメインごとに付与するユーザーID は2000 番以上とする ・バーチャルドメインごとに付与するグループID は2000 番とする suEXEC 環境は以下を想定しています。 ・CGI はユーザーID 2000 番以上のユーザーのみが実行することができる ・CGI はグループID 2000 番以上のユーザーのみが実行することができる ・CGI を起動するユーザー(apache ユーザー) は「nobody」とする ・CGI を利用できる領域を「/home」以下のみとする(バーチャル環境を/home/ 以下に構築するため) apache のソースをインターネットよりダウンロード後、ソースを解凍します。 # su root # cd /usr/local/src/ # wget httpd-2.2.9.tar.gz # tar zxvf httpd-2.2.9.tar.gz apache を解凍後、ディレクトリに入りインストール作業を行います。 # cd ./httpd-2.2.9 # ./configure --prefix=/usr/local/apache --enable-so --enable-suexec \ --with-suexec-caller=nobody --with-suexec-docroot=/home \ --with-suexec-userdir=public_html --with-suexec-uidmin=2000 --with-suexec-gidmin=2000 \ ※ configure について ※ --enable-so | apxs によるDSO モジュール管理をサポートします --enable-suexex | suEXEC 機能を有効にします --with-suexec-caller | suEXEC を実行するユーザー(apache 起動ユーザー) を指定します --with-suexec-docroot | suEXEC が有効となるドキュメントルートを指定します --with-suexec-userdir | suEXEC がアクセスを許されるユーザホームディレクトリ配下のサブディレ | クトリを指定します --with-suexec-uidmin | suEXEC の対象ユーザとして許されるUID の最小値を指定します --with-suexec-gidmin | suEXEC の対象ユーザとして許されるGID の最小値を指定します # make # make install 各バーチャルドメインはapache 設定ファイルによりシステムユーザーと1:1で関連づけされます。例えばユーザーuser01 をバーチャルドメイン運用ユーザーとして設定する場合、サーバー上に次の設定を行います。 # useradd -g 2000 -u 2000 user01 # mkdir /home/user01 # mkdir /home/user01/public_html # chown -R user01:2000 /home/user01 # chmod 705 /home/user01 基本的に/home 以下に各バーチャルドメインに対応するディレクトリを作成します。バーチャルドメインに対応するディレクトリ直下は一般ユーザーに公開する領域ですので、ウェブ以外にも様々なディレクトリを作成するかもしれません。これを考慮して、ウェブに関するディレクトリは全て/public_html ディレクトリにまとめることとします。また、apache をsuEXEC コンパイルしてあるので、/user01 ディレクトリの権限を同一グループからみられないようにするため、705 としています。 apache の起動スクリプトはソースに付属されていないので下記を利用します。 ↓ /etc/rc.d/init.d/httpd ---------------------------------- #!/bin/sh # chkconfig: 345 85 15 # description: Dynamic Relay Authorization Control # processname: httpd # # See how we were called. case "$1" in start) echo $"Starting httpd: " /usr/local/apache/bin/apachectl start ;; stop) echo $"Stopping httpd: " /usr/local/apache/bin/apachectl stop ;; restart) echo $"Restarting httpd: " /usr/local/apache/bin/apachectl restart ;; *) echo "Usage: $0 { start | stop }" exit 1 ;; esac exit 0 ↑ ココまで ------------------------------------------------ # chmod 755 /etc/rc.d/init.d/httpd # 起動方法 #--------------------------------------------------------------------------------------------- 以上でpostfix の設定が全て終わりました。起動スクリプトを実行することによりpostfix が起動されます。 起動方法 : /etc/rc.d/init.d/httpd start 停止方法 : /etc/rc.d/init.d/httpd stop # DSO の使い方 #--------------------------------------------------------------------------------------------- DSO はapache にモジュールを動的に組み込む仕組みです。configure 時に「--enable-so」を有効にすることで、モジュールをインストール時に組み込むことも、インストール後に組み込むことも可能です。大体必要とするモジュールというのはインストール後に必要となってくるので、下記にインストール後のAPXS によるモジュール組み込み方法を説明します。 例えば「mod_rewrite.so」モジュールを手動で組み込むには、下記のコマンドを実行します。 # cd /usr/local/apache/modules/mappers # /usr/local/apache/bin/apxs -cia mod_rewrite.c 上記で利用したAPXS のオプションは下記のように影響します。 c : コンパイルすることを指定します i : 出来上がったモジュールをインストールすることを指定します a : 自動的に「httpd.conf」に「LoadModule」ディレクティブを追加します 最後に、モジュールが組み込まれているかどうかは次のコマンドで確認できます。「rewrite_module (shared)」と表示されていれば組み込まれているということになります。 # /usr/local/apache/bin/httpd -M # バーチャル環境でのUserDir ディレクティブの利用について #--------------------------------------------------------------------------------------------- UserDir ディレクティブをバーチャル環境で利用する場合には注意が必要です。 apache httpd.conf の設定内容 ------------------------------- UserDir public_html ServerName test01.example01.jp DocumentRoot /home/webmaster-test01/public_html User test01 Group ppp ServerName test02.example01.jp DocumentRoot /home/webmaster-test02/public_html User test02 Group ppp password ファイルの設定内容 -------------------------------- test01:x:101:100::/home/webmaster-test01/public_html:/bin/bash test02:x:102:100::/home/webmaster-test02/public_html:/bin/bash ------------------------------------------------------------ 上記の設定によると、test01 ユーザーにtest01.example01.jp ドメインがtest02 ユーザーにtest02.example01.jp ドメインが関連づいています。この状態では、UserDir が設定されているので、次のような現象が起こり非常に問題です。 /home/webmaster-test02/public_html/public_html ディレクトリが存在する場合 http://test01.example01.jp/~test02 でtest02 ユーザーの領域が閲覧できてしまう /home/webmaster-test01/public_html/public_html ディレクトリが存在する場合 http://test02.example01.jp/~test01 でtest01 ユーザーの領域が閲覧できてしまう UserDir をUserDir public_html とした場合、基本的にhttp://[DomainName]/~[UserID] にアクセスしたとき、[DomainName] にかかわらず[UserID] のホームディレクトリを表示するのです。 これを回避するには下記の対応を行う必要があります。 ・UserDir desabled とする ・VirtualHost ごとにUserDir を設定する さらに、バーチャルドメインごとに利用できる UserID を設定するには、次の設定をVirtualHost ディレクティブの中に書きます。 UserDir disabled UserDir enabled UserID01 UserID02 ... # バーチャルホスト環境でのIP アドレスアクセス時のサイト表示 #--------------------------------------------------------------------------------------------- 通常URL にはFQDN を入力してサイトにアクセスします。しかし、URL にIP アドレスを入力したらどのサイトが表示されるのでしょうか?答えは、ネームベースかIP ベース、実装方法によって違ってきます。 ネームベースバーチャルホストの場合は、httpd.conf の最上部に記載している のサイトが表示されます。 IP ベースバーチャルホストの場合は、IP アドレスに対応する のサイトが表示されます。