77Lifeworkベータ版

77Lifeworkベータ版

IT関係の話をメインとして、その他私の趣味や雑記用のブログです。ここに書いた内容が少しでも参考になれば嬉しいです。

Apacheを複数起動(複数インスタンスを構成)する

はじめに

今回はLinux上にインストールしたApacheを複数同時に起動する方法を書いていきます。
ここではApacheインスタンスを2つ起動しますが、それぞれのインスタンスへのアクセスはポート番号で区別することとします。
(もちろん、IPアドレスでも区別できます)

構成情報

CentOS 7.7(1908)
Apache 2.4
・ポート番号
 インスタンス1:80
 インスタンス2:8080


アクセスする時のイメージは下図のような感じです。
f:id:J-back:20191110232259j:plain:w600

Apacheインストール準備

今回はApacheのソースファイルをダウンロードし、コンパイルしてインストールする方法で進めます。
Apacheコンパイルにはいくつかパッケージが必要なので、先にインストールしておきます。

まずは以下のパッケージをyumでインストールします。

yum -y install gcc pcre pcre-devel expat-devel

Apacheのソースファイルをコンパイルするためには「apr」と「apr-util」が必要なので、これらのソースファイルを以下のリンク先からダウンロードします。tar.gz形式を選択しましょう。
apr.apache.org


ダウンロードしたtarファイルをSCP等でインストール先のサーバに配置します。ここでは「/tmp」に置きました。
f:id:J-back:20191112232627p:plain:w600

以下コマンドで解凍します。

cd /tmp
tar -zxvf apr-1.6.5.tar.gz
tar -zxvf apr-util-1.6.1.tar.gz


aprを「/opt/apr-1.6.5」にインストールします。

cd /tmp/apr-1.6.5/
./configure --prefix=/opt/apr-1.6.5
make
make install

下記のエラーが出た場合にはconfigureファイルを編集します。

rm: cannot remove 'libtoolT': No such file or directory

以下のように変更します。

vi /tmp/apr-1.6.5/configure

変更前:
$RM "$cfgfile"
変更後:
$RM -f "$cfgfile"

f:id:J-back:20191112233058p:plain:w600



次にapr-utilを「/opt/apr-util-1.6.1」にインストールします。

cd /tmp/apr-util-1.6.1/
./configure --prefix=/opt/apr-util-1.6.1 --with-apr=/opt/apr-1.6.5
make
make install


また、Apacheの実行用ユーザを作成しておきます。

useradd -s /sbin/nologin apache
groupadd apache
usermod -aG apache apache

Apacheコンパイル

以下のダウンロードページからApacheのソースファイルをダウンロードします。
httpd.apache.org


tar.gz形式のソースファイルを選択しましょう。
f:id:J-back:20191109232457p:plain:w600

ダウンロードしたソースファイルをSCP等でインストール先のサーバに配置します。
ここでは「/tmp」に配置したので、以下コマンドで解凍します。

cd /tmp
tar -zxvf httpd-2.4.41.tar.gz

以下コマンドでコンパイルします。

cd /tmp/httpd-2.4.41/
./configure --prefix=/opt/httpd-2.4.41 --with-apr=/opt/apr-1.6.5 --with-apr-util=/opt/apr-util-1.6.1
make
make install

ここまでで1つ目のApacheをインストールすることができたので、次は2つ目のApacheをインストールしていきましょう。
2つ目のApacheディレクトリ名を「httpd-2.4.41-ex」として「/opt/httpd-2.4.41-ex」にインストールします。

cd /tmp
./configure --prefix=/opt/httpd-2.4.41-ex --with-apr=/opt/apr-1.6.5 --with-apr-util=/opt/apr-util-1.6.1
make
make install

これで独立した2つのApacheをインストールすることができました。
最後にインストールしたディレクトリの所有者・グループをapacheに変更しておきましょう。

chown -R apache /opt/httpd-2.4.41
chgrp -R apache /opt/httpd-2.4.41
chown -R apache /opt/httpd-2.4.41-ex
chgrp -R apache /opt/httpd-2.4.41-ex

IPアドレス・ポートの設定

ここからは、インストールした2つのApacheが使用するIP・ポートを設定します。
今回は以下のように、同じIPアドレス・別々のポートでアクセスするようにしました。

httpd-2.4.41
 ServerRoot:/opt/httpd-2.4.41
 IPアドレス:192.168.1.12
 ポート:80

httpd-2.4.41-ex
 ServerRoot:/opt/httpd-2.4.41-ex
 IPアドレス:192.168.1.12
 ポート:8080


まずは1つ目のインスタンスhttpd-2.4.41」の設定をするため、「/opt/httpd-2.4.41/conf/httpd.conf」をエディタで開きます。

ServerRootが「/opt/httpd-2.4.41」となっていることを確認。
f:id:J-back:20191123141325p:plain:w600


使用するIPとポートの指定部分で「Listen 192.168.1.12:80」と記述します。
f:id:J-back:20191123141540p:plain:w600


UserとGroupは「apache」を指定しておきましょう。
f:id:J-back:20191123141725p:plain:w600


DocumentRootが「/opt/httpd-2.4.41/htdocs」であることを確認します。
f:id:J-back:20191123141843p:plain:w600


ここまでできたら、「/opt/httpd-2.4.41/conf/httpd.conf」を保存して閉じます。

次に2つ目のインスタンスhttpd-2.4.41-ex」の設定ファイル「/opt/httpd-2.4.41-ex/conf/httpd.conf」を開き、
・ServerRootが「/opt/httpd-2.4.41-ex」となっていることを確認
・使用するIPとポートの指定部分で「Listen 192.168.1.12:8080」と記述
・UserとGroupは「apache」を指定
・DocumentRootが「/opt/httpd-2.4.41-ex/htdocs」であることを確認
を実施します。

Apacheをサービスに登録

インストールした2つのApacheをそれぞれ別のサービスとして登録しましょう。
まずは「/etc/systemd/system」に「httpd24.service」というファイルを作成し、中身を以下のように記述します。

[Unit]
Description=httpd24
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)

[Service]
Type=forking
ExecStart=/opt/httpd-2.4.41/bin/apachectl -f /opt/httpd-2.4.41/conf/httpd.conf -k start
ExecReload=/opt/httpd-2.4.41/bin/apachectl -k graceful
ExecStop=/opt/httpd-2.4.41/bin/apachectl -k stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target


2つ目のインスタンスについても同様に「/etc/systemd/system」に「httpd24-ex.service」というファイルを作成し、中身を以下のように記述します。

[Unit]
Description=httpd24-ex
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)

[Service]
Type=forking
ExecStart=/opt/httpd-2.4.41-ex/bin/apachectl -f /opt/httpd-2.4.41-ex/conf/httpd.conf -k start
ExecReload=/opt/httpd-2.4.41-ex/bin/apachectl -k graceful
ExecStop=/opt/httpd-2.4.41-ex/bin/apachectl -k stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

2つのインスタンスのファイルを用意できたら、起動してみましょう。

systemctl start httpd24

以下コマンドで起動できているか確認します。

systemctl status httpd24

f:id:J-back:20191123145904p:plain:w600

同様に、2つ目のインスタンスも起動しましょう。

systemctl start httpd24-ex

以下コマンドでプロセスを確認し、それぞれ起動していればOKです。

ps aux | grep httpd

f:id:J-back:20191123152759p:plain:w600

2つのインスタンスの動作確認

ブラウザを起動して「http://192.168.1.12」にアクセスすると、1つ目のインスタンスが応答しています。
f:id:J-back:20200320163541p:plain:w600

また、「http://192.168.1.12:8080」にアクセスすると、2つ目のインスタンスが応答します。
f:id:J-back:20200320163700p:plain:w600


しかし、この状態だと両方とも初期画面なので、それぞれのインスタンスが応答しているのか分かりずらいですね。
そこで、初期画面にインスタンスの番号を表示するように少し書き換えます。
1つ目のインスタンスの初期画面として表示されるのは「/opt/httpd-2.4.41/htdocs/index.html」なので、これを以下のように編集します。

<html>
    <body>
        <h1>It works!<br></h1>
        Instance1
    </body>
</html>

この状態で再び「http://192.168.1.12」にアクセスすると、以下のように「Instance1」と表示されていますね。
f:id:J-back:20200320173021p:plain:w600



また、2つ目のインスタンスの初期画面として表示されるのは「/opt/httpd-2.4.41-ex/htdocs/index.html」なので、これも以下のように編集します。

<html>
    <body>
        <h1>It works!<br></h1>
        Instance2
    </body>
</html>

こちらも編集後、「http://192.168.1.12:8080」にアクセスすると、「Instance2」が表示されています。
f:id:J-back:20200320173138p:plain:w600


最後に

以上で2つのApacheインスタンスをインストールし、起動させることができました。
最後までお読みいただき、ありがとうございました。