単一サーバ上でApacheを複数プロセス起動する

複数のWebサイトを管理されている方で、Webサイト毎にWebサーバーを立てて運営されているケースも多いと思います。
しかし、Webサーバーを複数運用しているとパッチ適用など管理する時間が多くなり大変ですよね。
管理工数を減らすため、VirtualHostを使い、1台のサーバで複数のWebサイトを運用しているなんてケースもたくさんあると思います。
しかし、VirtualHostを利用した場合、httpdプロセスが共有されているため、httpdプロセスが停止してしまうとVirtualHost全てが使えなくなるという側面も持っています。この問題は、Webサイト毎にhttpdプロセスを起動させることで解決が可能です。
ただし、この方法は、httpdプロセス数に応じてリソースを消費するので導入サーバーのリソースが十分でない環境においては、おすすめできません。それでは、私がいつも行う手順を記載しますのでご参考にしていただければと思います。

構成例

今回は、サーバー1台にWebサーバー2台を構築する手順をご説明します。

既存
サイト名 sample.co.jp
プロセス名 httpd
IPアドレス 192.168.0.1
ポート番号 80
サーバルートディレクトリ /var/www/html/
pidファイル /var/run/httpd.pid
ログディレクトリ /var/log/httpd/
設定ファイルディレクトリ /etc/httpd/conf/
追加
サイト名 sample.biz
プロセス名 httpd.sample.biz
IPアドレス 192.168.0.11
ポート番号 80
サーバルートディレクトリ /var/www/sample.biz/
pidファイル /var/run/httpd.sample.biz.pid
ログディレクトリ /var/www/sample.biz/logs/
設定ファイルディレクトリ /var/www/sample.biz/conf/

設定手順

  1. 複数IPアドレスの設定

追加するWebサーバー用のIPアドレスを設定するため、サーバーに新しくネットワークインターフェイスを追加します。

cd /etc/sysconfig/network-scripts/
ls ifcfg-eth*
-rw-r--r-- 1 root root 222 1月 15 2016 ifcfg-eth0

vi ifcfg-eth0:1

ifcfg-eth0:1の内容

DEVICE=eth0:1
BOOTPROTO=none
ONBOOT=yes
TYPE="Ethernet"
NETMASK=255.255.255.0
IPADDR=192.168.0.11

ネットワークインタフェースの追加が完了したらネットワークを再起動します。

#ネットワークを再起動
service network restart

#追加したIPアドレスが有効になっているかを確認
ip addr
  1. 既存Webサーバーのhttpd.confファイルを修正

既存のhttpd.confファイルのListen 設定を確認し、ポート番号のみが指定されていた場合、80番に着信する通信を占有してしまうため、ListenにIPアドレスを指定する。こうすることでWebサーバー毎の処理が可能となる。

/etc/httpd/conf/httpd.conf

Listen 80 ←80番ポートを占有してしまう
 ↓
Listen 192.168.0.1:80 ←受付けるIPアドレスを指定
  1. 追加Webサーバー用の設定を行なう
(1)追加Webサーバー用ディレクトリを作成する
cp -pr /var/www /var/sample.biz
mv /var/sample.biz /var/www/
(2)設定ファイルを作成する

Apache デフォルトの構成(設定ファイル)を複製し、構成1の設定ファイルを複製します。

cp -pr /etc/httpd/* /var/www/sample.biz
(3)Webサーバー毎にログファイルを作成するため、ログディレクトリを作り直す
unlink /var/www/sample.biz/logs
mkdir /var/www/sample.biz/logs
(4)httpdサーバーの起動に必要なファイル設定を行う

追加Webサーバー用にプロセスと起動スクリプトを複製し、中身を修正します。

①httpdプロセスの複製
cp -p /usr/sbin/httpd /usr/sbin/httpd.sample.biz
②起動スクリプトの複製
cp -p /etc/init.d/httpd /etc/init.d/httpd.sample.biz
③起動スクリプトの修正
Apacheが起動時に読み込む設定ファイル(confファイル)は起動スクリプト(/etc/init.d/httpd)に記述されています。別のconfファイルを読み込む場合、スクリプトを複製して読み込むconfファイルを変更します。
    • 起動オプションを追加する
38行目くらいを修正
# 構成1
OPTIONS="-f /var/www/sample.biz/conf/httpd.conf -k start"
    • confファイルパスを修正する
41行目
# 構成1
CONFFILE=/etc/httpd/conf/httpd.conf
↓
CONFFILE=/var/www/sample.biz/conf/httpd.conf
    • プロセスIDファイルのパスを修正する

起動中のプロセスIDファイル(*.pid)の重複を避けるため、ファイル名の変更を実施します。

35行目
# 構成1
pidfile=${PIDFILE-/var/run/httpd.pid}
↓
pidfile=${PIDFILE-/var/run/httpd.sample.biz.pid}
    • ロックファイルのパスを修正する

プロセスIDファイルと同様に、ロックファイルのパスを修正します。

36行目
# 構成1
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
↓
lockfile=${LOCKFILE-/var/lock/subsys/httpd.sample.biz}
    • httpd.confファイルの修正
構成に合わせて、httpd.confファイルを修正します。
# 構成1
#vi /var/www/sample.biz/conf/httpd.conf
Listen 192.168.0.11:80
ServerName 192.168.0.11:80
ServerRoot /var/www/sample.biz
PidFile /var/run/httpd.sample.biz.pid
以上で、Apacheを複数プロセスで起動する設定は完了です。

 

  1. 自動起動の設定

次のコマンドを実行し、自動起動の設定を行います。

# chkconfig --level 2345 httpd.sample.biz on
  1. プロセスの起動

それぞれの起動スクリプトを実行し、起動します。

/etc/init.d/httpd.sample.biz start
  1. プロセスの起動確認
psコマンドでプロセスが複数実行できていることを確認してください。
# ps -ef | grep httpd.sample.biz
root     28622     1  0 Mar16 ?        00:00:16 /usr/sbin/httpd.sample.biz -f /var/www/sample.biz/conf/httpd.conf -k start
apache    3651 28622  0 02:23 ?        00:00:00 /usr/sbin/httpd.sample.biz -f /var/www/sample.biz/conf/httpd.conf -k start
apache   17799 28622  0 11:30 ?        00:00:00 /usr/sbin/httpd.sample.biz -f /var/www/sample.biz/conf/httpd.conf -k start
apache   17803 28622  0 11:30 ?        00:00:00 /usr/sbin/httpd.sample.biz -f /var/www/sample.biz/conf/httpd.conf -k start
apache   17804 28622  0 11:30 ?        00:00:00 /usr/sbin/httpd.sample.biz -f /var/www/sample.biz/conf/httpd.conf -k start
  1. ログローテーションの設定追加

作成したサイトのログファイルをローテーションさせるため、ローテション設定を変更します。
まず、初めに/etc/logrotate.d

cd /etc/logrotate.d
cp -p httpd httpd.sample.biz
vi httpd.sample.biz

/etc/logrotate.d/httpd.sample.bizの内容

# 先頭行のログファイルパスを修正
/var/www/sample.biz/logs/*log 
{
    daily
    missingok
    notifempty 
    rotate 7
    sharedscripts
    postrotate
        # httpd実行ファイルパスを修正
        /sbin/service httpd.sample.biz reload > /dev/null 2>/dev/null || true
    endscript
}

以上でWebサーバーを複数起動させる手順は、完了です。
あとは、ここのWebサーバーを起動し、正しく表示されれば

動作確認

設定に問題がなければ、以下のURLでページが表示されると思います。

http://192.168.0.11/
WEBサイトを管理する時間やサーバのコスト削減の参考になれば幸いです。

Leave a Reply

Your email address will not be published. Required fields are marked *