はじめに
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は差分のみ書いてありますので、ほかに入れる設定がなければ記載のある部分のみ修正していただければ大丈夫だと思います。
[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
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をある程度理解していないと難しいやつかもですね(かくいう筆者も人から教わってないと、この方法は思いつかないです…)。
それでは、また会いましょう。