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は更新されないことになってしまう・・・。
とりあえず後回し。