1台のサーバで複数のApacheを動かす

検証~複数のApacheインスタンス作成~

Apache1つに多くのバーチャルドメインを載せることしか知らなかったが、ひょんなことから1台のサーバで複数Apacheを動かせることを知った。
バーチャルドメインを多く相乗りさせると、障害が発生したときバーチャルドメインが全滅するし、どこで障害が発生したのかわかりづらい。
なので1台のサーバで複数Apacheを動かすことをやってみようと思う。

設計

・IPアドレスかポートでプロセスを分けるようだが、今回はポートでいく。
・現在動かしているNLBでは、ドメインごとにポートを振り分けることができなさそうなので暫定的にALBを作成する
・test1.hdora.tokyoを81ポートで、test2.hdora.tokyoは82ポートで、test3.hdora.tokyoは83ポートで受けるようにする。
・pidFile、Listen、起動スクリプト、それ以外にもドキュメントルートやらログファイルなどもうまい具合にやる。

作業記録

・selinux無効
setenforce 0

・Apacheインストール
yum install httpd

・httpd2用のドキュメントルート作成
cp -pr /var/www /var/www2

・httpd2用のユニットファイル作成
cp -ai /usr/lib/systemd/system/httpd.service /etc/systemd/system/httpd2.service
## ユニットファイルのコピー先は/etc/systemd/system の方がよい。
## https://weblabo.oscasierra.net/centos7-systemd-files/
## サーバーの管理者が独自に変更・編集した設定ファイルは /etc/systemd/system フォルダに配置するルールになっています。
## 具体的には、/usr/lib/systemd/system 配下のファイルをここにコピーしてきて変更を加えることが多いでしょう。

## https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system_administrators_guide/sect-managing_services_with_systemd-unit_files
## https://tex2e.github.io/blog/linux/create-my-systemd-service

vi /usr/lib/systemd/system/httpd2.service
-----
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
↓
ExecStart=/usr/sbin/httpd -f /etc/httpd2/conf/httpd.conf $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd -f /etc/httpd2/conf/httpd.conf $OPTIONS -k graceful
-----

・設定ファイル一式コピー
cp -ai /etc/httpd /etc/httpd2

・httpd2のhttpd.conf編集
vi /etc/httpd2/conf/httpd.conf
-----
ServerRoot "/etc/httpd"
↓
ServerRoot "/etc/httpd2"
PidFile run/http.pid2

Listen 80
↓
Listen 82

DocumentRoot "/var/www/html"
↓
DocumentRoot "/var/www2/html"

<Directory "/var/www">
↓
<Directory "/var/www2">

<Directory "/var/www/html">
↓
<Directory "/var/www2/html">

    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
↓
    ScriptAlias /cgi-bin/ "/var/www2/cgi-bin/"

<Directory "/var/www/cgi-bin">
↓
<Directory "/var/www2/cgi-bin">
-----

cat /etc/httpd2/conf/httpd.conf | grep /var/www

・リロード、Apache起動
systemctl daemon-reload
systemctl start httpd
systemctl start httpd2

・設定確認
httpd -S
-----
VirtualHost configuration:
ServerRoot: "/etc/httpd"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/etc/httpd/logs/error_log"
Mutex proxy-balancer-shm: using_defaults
Mutex rewrite-map: using_defaults
Mutex authdigest-client: using_defaults
Mutex proxy: using_defaults
Mutex authn-socache: using_defaults
Mutex default: dir="/run/httpd/" mechanism=default 
Mutex mpm-accept: using_defaults
Mutex authdigest-opaque: using_defaults
PidFile: "/run/httpd/httpd.pid"
Define: _RH_HAS_HTTPPROTOCOLOPTIONS
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="apache" id=48
Group: name="apache" id=48
-----

httpd -S -f /etc/httpd2/conf/httpd.conf
-----
VirtualHost configuration:
ServerRoot: "/etc/httpd2"
Main DocumentRoot: "/var/www2/html"
Main ErrorLog: "/etc/httpd2/logs/error_log"
Mutex authdigest-opaque: using_defaults
Mutex proxy-balancer-shm: using_defaults
Mutex rewrite-map: using_defaults
Mutex authdigest-client: using_defaults
Mutex proxy: using_defaults
Mutex authn-socache: using_defaults
Mutex default: dir="/run/httpd/" mechanism=default 
Mutex mpm-accept: using_defaults
PidFile: "/etc/httpd2/run/http.pid2"
Define: _RH_HAS_HTTPPROTOCOLOPTIONS
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="apache" id=48
Group: name="apache" id=48
-----

・index.htmlをhttpd,httpd2用に作成
vi /var/www/html/index.html
-----
httpd
-----

vi /var/www2/html/index.html
-----
httpd2
-----

・閲覧確認
https://<IPアドレス>
https://<IPアドレス>:82
↓
それぞれhttpd、httpd2が表示されることを確認

次回作業予定~ロードバランサーでのアクセス振り分け~

今回はまずサーバを一台立ち上げ、Apacheをインストールして複数のApacheを動かしました。
今回の作業記録を参考にhttpd1,httpd3(81ポート,83ポート)も作成、起動できるはず。
次回はLBの下に組み込み、3つのバーチャルドメインへのアクセスをそれぞれ81-83ポートに振り分けてみようと思います。
一つのApacheをダウンさせても他2つの閲覧に影響がないことを確認するところまでいきたいです。

迷っていること~ログ、yum updateについて~

宿題として、ログかなぁ。
/var/log/httpdの下にaccess2.logとかでいれてしまうか、/var/log/httpd2というディレクトリに入れるように設定するかだな。
他、気になった点といえばyum update。
/usr/sbin/httpdが更新されるならいいが、/etc/httpdの下が更新されるとしたら、/etc/httpd2は更新されないことになってしまう・・・。
とりあえず後回し。