同じApacheをコピーして複数動作させる。

要件によって、同じサーバ上で複数でHTTP/HTTPSサービスを起動しなければならない場合が生じます。
そうした場合には、Apacheで仮想ホストを作成するか、別のApacheコンパイルしてインストールする必要がありますが、それぞれ次のような問題点が存在します。

  • 仮想ホストの場合

それぞれのApacheを個別に起動/停止することができない。

既存のApacherpmパッケージなどからインストールしている場合、もう一つのApacheコンパイルオプションが変わってしまう場合がある。

上記2点をカバーするため、既存のApacheをコピーして別のApacheインスタンスとして起動することができます。
こうすれば、全く同じコンパイルオプションを持ったApacheを個別に起動/停止することが可能です。

前提

  • rpmコマンド等でインストールされたhttpdが動作していること。
  • 既存のApacheと別のポート/またはIPでListenさせる。

構成例

今回は下記の通り起動されることとします。

項目 既存Apache Apache
IPアドレス 192.168.1.1 192.168.1.2
ポート 80 80
configディレクト /etc/httpd /etc/httpd2
logディレクト /var/log/httpd /var/log/httpd2

以下、手順です。

手順

configの複製と修正
cp -rp /etc/httpd /etc/httpd2
  • configを修正する。
vi /etc/httpd2/conf/httpd.conf

以下修正点。

ServerRoot
ServerRoot "/etc/httpd2"
PidFile
PidFile run/httpd2.pid
Listenポート
Listen 192.168.1.2:80
ServerName
www.example2.com:80
DocumentRoot
DocumentRoot "/var/www2/html"
ログディレクトリの作成
cp -rp /var/log/httpd /var/log/httpd2
cd /etc/httpd2
rm logs
ln -s ../../var/log/httpd2 logs
sysconfigの設定ファイル複製及び修正
  • 設定ファイルをコピー

cp -p /etc/sysconfig/httpd /etc/sysconfig/httpd2

  • 設定ファイルを編集
vi /etc/sysconfig/httpd2

下記を追加。

OPTIONS
OPTIONS="-d /etc/httpd2 -f /etc/httpd2/conf/httpd.conf -D HTTPD_ROOT=/etc/httpd2 -D DEFAULT_PIDLOG=logs/httpd2.pid"
  • 元のhttpd用の設定ファイルも念のため編集
vi /etc/sysconfig/httpd

下記を追加。

OPTIONS
OPTIONS="-d /etc/httpd -f /etc/httpd/conf/httpd.conf -D HTTPD_ROOT=/etc/httpd -D DEFAULT_PIDLOG=logs/httpd.pid"
/usr/sbin/httpdの複製 or シンボリックリンク作成
cp -p /usr/sbin/httpd /usr/sbin/httpd2

or

ln -s /usr/sbin/httpd /usr/sbin/httpd2
起動スクリプト及びapachectlの複製及び修正
cp -p /etc/init.d/httpd /etc/init.d/httpd2
  • /usr/sbin/apachectlをコピー
cp -p /usr/sbin/apachectl /usr/sbin/apachectl2
vi /etc/init.d/httpd2
  • /usr/sbin/apachectl2を修正
vi /etc/init.d/httpd2

下記を編集。

  • /etc/init.d/httpd と/usr/sbin/apachectl2の修正点はほぼ同じ(行数は違うかも)。
コメント部分その1(9行目付近)
# config: /etc/httpd21/conf/httpd.conf
コメント部分その2(10行目付近)
# config: /etc/sysconfig/httpd2
コメント部分その3(11行目付近)
# pidfile: /var/run/httpd2.pid
sysconfig設定ファイル(16行目付近)
if [ -f /etc/sysconfig/httpd2 ]; then
sysconfig設定ファイル(17行目付近)
. /etc/sysconfig/httpd2
apachectlのPATHを変更(32行目付近)
apachectl=/usr/sbin/apachectl2
httpdのPATHを変更(33行目付近)
httpd=${HTTPD-/usr/sbin/httpd2}
プログラム名を変更(34行目付近)
prog=httpd_81
PidFileのPATHを変更(35行目付近)
pidfile=${PIDFILE-/var/run/httpd2.pid}
lockfileのPATHを変更(36行目付近)
lockfile=${LOCKFILE-/var/lock/subsys/httpd2}
サービスに登録
  • サービスに登録しておく。
chkconfig --add httpd2
chkconfig httpd2 on
ログローテートの設定追加
cp -p /etc/logrotate.d/httpd /etc/logrotate.d/httpd2
vi /etc/logrotate.d/httpd2

下記の様に編集。

/var/log/httpd2/*log {
     missingok
     notifempty
     sharedscripts
     postrotate
         /sbin/service httpd2 reload > /dev/null 2>/dev/null || true
     endscript
 }