0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Apacheを複数インスタンスで稼働させる方法

Last updated at Posted at 2025-08-25

はじめに

Apacheを複数インスタンスで稼働させたい人向けの記事です。
同じサーバ機器内で役割ごとに稼働させる場合や負荷分散のため等々、様々理由があると思いますが、今回はその手法としての複数インスタンス作成について書いていきます。

実施環境

Rocky Linux 8.8(Red hat系ならおそらく転用可能)

selinux=disabled(特に必要はないと思いますが、一応)

port 80,81 解放済み(81番は追加するインスタンス用)

※外に出られる環境であることが前提です。

設定方法

1.Apacheのインストール

何はともあれまずは、ソフトウェアのインストールをしましょう。

yum -y install httpd
または
dnf -y install httpd

2.起動に必要なファイルやディレクトリを複製

次に、起動に必要なファイルやディレクトリを複製していきましょう。
今回複製していくのは以下の通りです。

/usr/lib/systemd/system/httpd.service 
/usr/sbin/httpd
/var/www
/var/log/httpd
/etc/httpd

各ディレクトリとファイルの役割については以下に簡単に書いておきます。
ざっくりとした理解で書いているため、もし間違いがあればご指摘ください。

対象 説明
/usr/lib/systemd/system/httpd.service サービス起動ファイル
/usr/sbin/httpd バイナリファイルの置き場所
/var/www webページコンテンツの置き場所
/var/log/httpd ログファイルの置き場所
/etc/httpd 設定ファイルの置き場所

それでは複製していきましょう。
それぞれの"httpd-2nd"のところは好きな名前を付けてください。
また、/etc/httpdの中身のシンボリックリンクをいじる必要があるので、ついでにやってしまいます。

・/usr/lib/systemd/system/httpd.serviceの複製
cp -p /usr/lib/systemd/system/httpd.service /usr/lib/systemd/system/httpd-2nd.service

・/usr/sbin/httpdの複製
cp -p /usr/sbin/httpd /usr/sbin/httpd-2nd

・/var/wwwの複製
cp -rp /var/www /var/www-2nd

・/var/log/httpdの複製
cp -rp /var/log/httpd /var/log/httpd-2nd

・/etc/httpdの複製
cp -rp /etc/httpd /etc/httpd-2nd

・logs -> ../../var/log/httpdの修正
cd /etc/httpd-2nd
rm logs
ln -s ../../var/log/httpd-2nd logs

3.複製したファイルの修正等

複製が終わったら、複製したファイルの中身をいじっていきましょう。
httpd.confは差分のみ書いてありますので、ほかに入れる設定がなければ記載のある部分のみ修正していただければ大丈夫だと思います。

/usr/lib/systemd/system/httpd-2nd.service
[Unit]
Description=The Apache HTTP-2nd Server   //httpd-2ndのサービス定義ファイルであることを示すため、修正
Wants=httpd-init.service
After=network-online.target remote-fs.target nss-lookup.target httpd-init.service   //network-online.targetに変更。rebootするときにhttpdとIPアドレスが競合しないようにするため
Documentation=man:httpd.service(8)

[Service]
Type=notify
Environment=LANG=C

ExecStart=/usr/sbin/httpd-2nd -f /etc/httpd-2nd/conf/httpd.conf $OPTIONS -DFOREGROUND   //起動時、/etc/httpd-2nd/conf/httpd.confを読み込むようにする
ExecReload=/usr/sbin/httpd-2nd -f /etc/httpd-2nd/conf/httpd.conf $OPTIONS -k graceful   //再起動時、/etc/httpd-2nd/conf/httpd.confを読み込むようにする

KillSignal=SIGWINCH
KillMode=mixed
PrivateTmp=true

[Install]
WantedBy=multi-user.target
/etc/httpd-2nd/conf/httpd.conf(差分のみ)
ServerRoot "/etc/httpd-2nd"

Listen 81   //ほかのミドルウェアと競合しないポートならどこでもOK

PidFile run/httpd-2nd.pid   //"httpd"とpidファイルの競合を防ぐため

DocumentRoot "/var/www-2nd/html"

<Directory "/var/www-2nd">
    AllowOverride None
    Require all granted
</Directory>

<Directory "/var/www-2nd/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

ScriptAlias /cgi-bin/ "/var/www-2nd/cgi-bin/"

<Directory "/var/www-2nd/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

起動/停止確認

設定が終わったら、起動するか試してみましょう。
サービス定義ファイルを編集したので、先にデーモンをリロードすることも忘れずに。

・デーモンをリロード
systemctl daemon-reload

・httpdを起動&確認
systemctl start httpd
systemctl status httpd

・httpd-2ndを起動&確認
systemctl start httpd-2nd
systemctl status httpd-2nd

ここで起動に失敗したら、"journalctl -xe"コマンドでエラー文を確認してみてください。
やりがちなのは設定ファイルに誤字があったり、ポートを開いてなかったり、デーモンのリロードを忘れたり、ログのシンボリックリンクが間違ってたりetc..だったりしますので、今一度見直してみてください。

終わりに

いかがでしたでしょうか。
必要なファイルをコピーしていじるだけとはいえ、自分でサービスを作るみたいなものなので、linuxをある程度理解していないと難しいやつかもですね(かくいう筆者も人から教わってないと、この方法は思いつかないです…)。

それでは、また会いましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?