複数の Apache インスタンスを構築する方法

[2019/5/8 追記]
上級エンジニアが一部リライトしました。訂正部分はこの文字色で記載しています。

[2019/5/15追記]
追加訂正はこちらの色で記載しています。

こんにちは。サイオステクノロジー OSS サポート担当何敏欽です。

今回は、CentOS7/RHEL7 において、マルチインスタンスで Apache HTTP Server を構築してみます。

CentOS7/RHEL7 同梱版の Apache を使用する構築手順

httpd がインストールされ、httpd.service は正常に起動していることを前提とします。複数のインスタンスを構成するため、まずは httpd.conf ファイルと conf.d ディレクトリをコピーします。 /etc/httpd 配下をコピーします。
※元記事の内容でも、設定ファイルの分割にはなっていますが、httpd.conf を分けるのであれば、設定ファイル格納ディレクトリ自体を分けてしまおうという意図です。

# cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd2.conf
# cp -pr /etc/httpd/conf.d /etc/httpd/conf.d2

# cp -pr /etc/httpd /etc/httpd-2

コピーした /etc/httpd/conf/httpd2.conf ファイル内の listen ポート番号 (設定する番号によって、ファイアウォールと SELinux 周りの設定が必要になることもある) と、Include で読み込んでいる conf.d のディレクトリ名、を変更します。なお、PidFile ディレクティブを追記し、PidFile ディレクティブで指定する PID ファイルを異なるパスに設定します。

/etc/httpd-2/ 配下の設定ファイルを適宜変更します。とりあえず変更が必要なディレクティブを以下に列挙します。下記の他にも、環境に合わせて随時ディレクティブを変更してください。

Listen other_port_num [httpd.conf、ssl.conf]
ServerRoot /etc/httpd-2 [httpd.conf]
ErrorLog logs/error-2_log [httpd.conf、ssl.conf] (*1)
CustomLog logs/access-2_log [httpd.conf、ssl.conf] (*1)
PidFile run/http.pid2 [httpd.conf] (*2)
*1:/etc/httpd-2/logs のシンボリックリンク先を変えない場合に必要
*2:/etc/httpd-2/run のシンボリックリンク先を変えない場合に必要
   /etc/httpd-2/run のシンボリックリンク先を /run/httpd-2 などに変更する方法は、以下の通り。後日記載します-----
   # cp -p /usr/lib/tmpfiles.d/httpd.conf /usr/lib/tmpfiles.d/httpd-2.conf
    [/usr/lib/tmpfiles.d/httpd-2.conf]
    d /run/httpd-2 710 root apache
    d /run/httpd-2/htcacheclean 700 apache apache
   # systemd-tmpfiles --create /usr/lib/tmpfiles.d/httpd-2.conf
   -----

次に、systemd から起動するために 標準 httpd サービスのユニットファイルをコピーします。

# cp -p /usr/lib/systemd/system/httpd.service /usr/lib/systemd/system/httpd-2.service
# cp -p /etc/sysconfig/httpd /etc/sysconfig/httpd-2
※別インスタンスで Disk Cache Cleaning を使う場合
# cp -p /usr/lib/systemd/system/htcacheclean.service /usr/lib/systemd/system/htcacheclean-2.service
# cp -p /etc/sysconfig/htcacheclean /etc/sysconfig/htcacheclean-2

httpd2 のインスタンスを管理するように systemd を設定します。コピーした /usr/lib/systemd/system/httpd2.service ファイル内の EnvironmentFile の項目の設定値を変更します。

EnvironmentFile=/etc/sysconfig/httpd-2

コピーした /etc/sysconfig/httpd2 ファイル内の OPTIONS の行を下記のように記述します。コメント解除し、下記のように追記します。

OPTIONS="-f /etc/httpd-2/conf/httpd.conf"

/usr/lib/systemd/system/htcacheclean-2.service 変更箇所

After=httpd-2.service
PIDFile=/run/httpd-2/htcacheclean/pid
EnvironmentFile=/etc/sysconfig/htcacheclean-2
ExecStart=/usr/sbin/htcacheclean -P /run/httpd-2/htcacheclean/pid -d $INTERVAL -p $CACHE_ROOT -l $LIMIT $OPTIONS

/etc/sysconfig/htcacheclean-2 変更箇所

CACHE_ROOT=(適切なディレクトリ)

以上で設定が完了しました。 httpd2.service を起動します。問題なく起動できていますね。

# systemctl start httpd-2.service
# systemctl status httpd-2.service
● httpd-2.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd-2.service; disabled; vendor preset: disabled)
   Active: active (running) since 木 2018-12-13 13:53:49 JST; 11s ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 18426 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
 Main PID: 18452 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd2.service
           ├─18452 /usr/sbin/httpd -f /etc/httpd-2/conf/httpd.conf -DFOREGROUND
           ├─18456 /usr/sbin/httpd -f /etc/httpd-2/conf/httpd.conf -DFOREGROUND
           ├─18457 /usr/sbin/httpd -f /etc/httpd-2/conf/httpd.conf -DFOREGROUND
           ├─18458 /usr/sbin/httpd -f /etc/httpd-2/conf/httpd.conf -DFOREGROUND
           ├─18459 /usr/sbin/httpd -f /etc/httpd-2/conf/httpd.conf -DFOREGROUND
           └─18460 /usr/sbin/httpd -f /etc/httpd-2/conf/httpd.conf -DFOREGROUND

12月 13 13:53:49 bin7.3 systemd[1]: Starting The Apache HTTP Server...
12月 13 13:53:49 bin7.3 systemd[1]: Started The Apache HTTP Server.

以降の修正は後日行います。

コミュニティ版 Apache を使用する構築手順

まず、コンパイルに必要となる gcc、pcre-devel パッケージをインストールします。

# yum install gcc pcre-devel

Apache2.4 系の最新版  APR と APR-util の最新版 を確認し、ダウンロードします。

# cd /usr/local/src
# wget http://httpd.apache.org/download.cgi/httpd-2.4.37.tar.gz
# wget http://apr.apache.org/download.cgi/apr-1.6.5.tar.gz
# wget http://apr.apache.org/download.cgi/apr-util-1.6.1.tar.gz

それぞれのファイルを展開します。

# tar zxvf httpd-2.4.37.tar.gz
# tar zxvf apr-1.6.5.tar.gz
# tar zxvf apr-util-1.6.1.tar.gz

APR と APR-util を Apache の srclib ディレクトリに移動します。

# mv apr-1.6.5 httpd-2.4.37/srclib/apr
# mv apr-util-1.6.1 httpd-2.4.37/srclib/apr-util

ソースをコンパイルして、Apache をインストールします。

# cd httpd-2.4.37/
# ./configure -enable-suexec -with-suexec-docroot=/home -with-include-apr
※configure オプションは適宜追加・変更してください
# make
# make install

複数のインスタンスを構成するため、もう一つ Apache (apache2-Instance) をインストールします。「-prefix」でインストールパスを /usr/local-Instance/apache2-Instance に指定します。

# cd /usr
# mkdir local-Instance
# cd local-Instance/
# mkdir apache2-Instance
# ./configure --prefix=/usr/local-Instance/apache2-Instance -enable-suexec -with-suexec-docroot=/home -with-include-apr
# make
# make install

インストールが終わったら、両インスタンスそれぞれの httpd.conf と httpd-mpm.conf を設定します。
シングルインスタンスで動作できることを確認してから、同梱版同様にファイルのコピー等を行ない、環境に応じた設定をします。

# vim /usr/local/apache2/conf/httpd.conf
ServerRoot "/usr/local/apache2"
Listen Number2
ServerName bin7.3

# vim /usr/local-Instance/apache2-Instance/conf/httpd.conf
ServerRoot "/usr/local-Instance/apache2-Instance"
Listen Number3
ServerName bin7.3.instance

# vim /usr/local/apache2/conf/extra/httpd-mpm.conf
<IfModule !mpm_netware_module>
    PidFile "logs/httpd.pid"
</IfModule>

# vim /usr/local-Instance/apache2-Instance/conf/extra/httpd-mpm.conf
<IfModule !mpm_netware_module>
    PidFile "logs/httpd-instance.pid"
</IfModule>

両インスタンスそれぞれの以下は起動スクリプトの例です。を設定します。

# vim /etc/systemd/system/httpd.service
[Unit]
Description=Apache Web Server 01
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/apache2/bin/apachectl -f /usr/local/apache2/etc/conf/httpd.conf start
ExecStop=/usr/local/apache2/bin/apachectl -f /usr/local/apache2/etc/conf/httpd.conf graceful-stop
ExecReload=/usr/local/apache2/bin/apachectl -f /usr/local/apache2/etc/conf/httpd.conf graceful
PrivateTmp=true
LimitNOFILE=infinity

[Install]
WantedBy=multi-user.target

# vim /etc/systemd/system/httpd-instance.service
[Unit]
Description=Apache Web Server 02
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local-Instance/apache2-Instance/bin/apachectl start
ExecStop=/usr/local-Instance/apache2-Instance/bin/apachectl graceful-stop
ExecReload=/usr/local-Instance/apache2-Instance/bin/apachectl graceful
PrivateTmp=true
LimitNOFILE=infinity

[Install]
WantedBy=multi-user.target

以上で設定が完了しました。両インスタンスを起動します。問題なく起動できていますね。
※動作結果は省略します。

# systemctl daemon-reload
# systemctl start httpd.service
# systemctl start httpd-instance.service.service
# systemctl enable httpd.service
# systemctl enable httpd-instance.service.service
# systemctl status  httpd.service
● httpd.service - Apache Web Server 01
   Loaded: loaded (/etc/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 火 2018-12-25 11:00:56 JST; 3min 45s ago
  Process: 1153 ExecStart=/usr/local/apache2/bin/apachectl start (code=exited, status=0/SUCCESS)
 Main PID: 1207 (httpd)
   CGroup: /system.slice/httpd.service
           tq1207 /usr/local/apache2/bin/httpd -k start
           tq1209 /usr/local/apache2/bin/httpd -k start
           tq1210 /usr/local/apache2/bin/httpd -k start
           mq1211 /usr/local/apache2/bin/httpd -k start

12月 25 11:00:54 bin7.3 systemd[1]: Starting Apache Web Server 01...
12月 25 11:00:56 bin7.3 systemd[1]: Started Apache Web Server 01.

# systemctl status  httpd-instance.service
● httpd-instance.service - Apache Web Server 02
   Loaded: loaded (/etc/systemd/system/httpd-instance.service; enabled; vendor preset: disabled)
   Active: active (running) since 火 2018-12-25 11:00:56 JST; 3min 57s ago
  Process: 1156 ExecStart=/usr/local-Instance/apache2-Instance/bin/apachectl start (code=exited, status=0/SUCCESS)
 Main PID: 1303 (httpd)
   CGroup: /system.slice/httpd-instance.service
           tq1303 /usr/local-Instance/apache2-Instance/bin/httpd -k start
           tq1329 /usr/local-Instance/apache2-Instance/bin/httpd -k start
           tq1330 /usr/local-Instance/apache2-Instance/bin/httpd -k start
           mq1331 /usr/local-Instance/apache2-Instance/bin/httpd -k start

12月 25 11:00:54 bin7.3 systemd[1]: Starting Apache Web Server 02...
12月 25 11:00:56 bin7.3 systemd[1]: Started Apache Web Server 02.

以上で CentOS7/RHEL7 同梱版の Apache とコミュニティ版 Apache を使用してマルチインスタンスの構築方法を説明しました。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメント投稿

メールアドレスは表示されません。


*