## はじめに
Apacheには1台のサーバー上で複数のWebサイトを運用できる「バーチャルホスト(VirtualHost)」という仕組みがあります。実際の案件でも、dev/stg/prd環境を1台のサーバーにまとめたいケースは少なくないと思います。

今回はそんなバーチャルホストの基本的な設定を実際に試してまとめました。
初めての方にもわかりやすいよう、シンプルに解説していきます!

対象読者

  • Apacheでバーチャルホスト設定を初めて行う人
  • 1台のサーバーで複数環境(dev/stg/prd)を切り分けて運用したい人

前提条件

  • EC2インスタンスを使用していること。(今回はRHEL9.5を使用。)
  • Apacheがインストール・起動していること。(今回はApache2.4.62を使用。)
  • 今回はポート80 (HTTP) を利用するためセキュリティグループで80を許可していること。

設定手順

ステップ1. バーチャルホスト用のディレクトリを作成

作成したいバーチャルホストごとにディレクトリをドキュメントルートに作成します。
今回は、dev、stg、prd環境を作成するので計3つのディレクトリを作成します。

$ mkdir -p /var/www/html/vhosts_dev/htdocs/
$ mkdir -p /var/www/html/vhosts_stg/htdocs/
$ mkdir -p /var/www/html/vhosts_prd/htdocs/

ステップ2. テストファイルを配置

ステップ1で作成した各ディレクトリ配下にアクセスした際に表示させるファイルを作成します。
今回は簡単なhtmlファイルを作成します。

■ dev環境

$ vi /var/www/html/vhosts_dev/htdocs/index.html

 
<h1>ここはdev環境のサイトです。</h1>
 

■ stg環境

$ vi /var/www/html/vhosts_stg/htdocs/index.html

 
<h1>ここはstg環境のサイトです。</h1>
 

■ prd環境

$ vi /var/www/html/vhosts_prd/htdocs/index.html

 
<h1>ここはprd環境のサイトです。</h1>
 

ステップ3. 設定ファイルを作成

アクセスするドメインごとに設定ファイルを作成します。
Server Nameには、アクセスするドメインを記載します。今回は、yoshimura-${環境名}.comにアクセスします。
DocumentRootには、ステップ1で作成したディレクトリの絶対パスを記載します。
ErrorLog、CustomLogにはそれぞれのログを保存したいパスを記載します。

■ yoshimura-dev.com

$ vi /etc/httpd/conf.d/yoshimura-dev.conf

ServerName yoshimura-dev.com
DocumentRoot /var/www/html/vhosts_dev/htdocs/

ErrorLog /var/log/httpd/yoshimura-dev-error_log
CustomLog /var/log/httpd/yoshimura-dev-access_log combined

AllowOverride All
Require all granted


■ yoshimura-stg.com

$ vi /etc/httpd/conf.d/yoshimura-stg.conf

ServerName yoshimura-stg.com
DocumentRoot /var/www/html/vhosts_stg/htdocs/

ErrorLog /var/log/httpd/yoshimura-stg-error_log
CustomLog /var/log/httpd/yoshimura-stg-access_log combined

AllowOverride All
Require all granted


■ yoshimura-prd.com

$ vi /etc/httpd/conf.d/yoshimura-prd.conf

ServerName yoshimura-prd.com
DocumentRoot /var/www/html/vhosts_prd/htdocs/

ErrorLog /var/log/httpd/yoshimura-prd-error_log
CustomLog /var/log/httpd/yoshimura-prd-access_log combined

AllowOverride All
Require all granted


ステップ4. httpdを再起動

Apacheの設定は以上になるので最後に再起動しておきます。

# systemctl restart httpd

ステップ5. ドメイン名とIPアドレスを紐づけ

今回は手っ取り早く確認したいのでDNSは使用しません。
代わりにローカル端末の /etc/hostsファイルで設定します。

$ vi /etc/hosts

# インスタンスのパブリックIP ServerName
x.xxx.xx.xxx yoshimura-dev.com
x.xxx.xx.xxx yoshimura-stg.com
x.xxx.xx.xxx yoshimura-prd.com

挙動確認

設定は以上なので正常にアクセスできるか確認します。
■ yoshimura-dev.com


■ yoshimura-stg.com


■ yoshimura-prd.com

全環境で問題なくアクセスできていますね。

おわりに

今回は、Apacheでバーチャルホストを設定し、1台のサーバー上でdev/stg/prd環境を運用する基本的な手順をまとめました。
やっていることは簡単なことですが、サーバー構成を整理して運用するためには欠かせない重要な知識です。
本記事がこれからバーチャルホストを設定する方の参考になれば幸いです!