ApacheのVirtualHostを使って複数のプロジェクトを管理する

ApacheのVirtualHostを使って複数のプロジェクトを管理する

ローカルの LAMP 環境で開発を行っていると、複数のプロジェクトを持ちたくなることがあったのでその方法をまとめました。

Apache の VirtualHost という機能を使うことによって、同じ Web サーバ内で Laravel の開発環境を複数作ったり、WordPress や fuelPHP など異なるフレームワークなども利用することが出来ます。

Laravel の開発環境の構築は以下の記事を参考にしてください。

今回は Laravel のプロジェクトをもう一つ作成していきます。

VirtualHost とは?

バーチャルホストという用語は、1 台のマシン上で (www.company1.comandwww.company2.com のような) 二つ以上のウェブサイトを扱う運用方法のことを指します。 https://httpd.apache.org/docs/2.4/ja/vhosts/

Apache のインストールされたサーバ 1 台で、複数のサイトを管理できるようになります。今回はローカルで使用するために構築していきますが、Apache の機能なので本番環境で複数の Web サイトを公開することも出来ます。

なお、Vagrant 上に構築した CentOS8 に対して設定を行っていきます。

そこまで導入する方法は過去の記事で解説していますので参考にしてみて下さい。

ドキュメントルートを設置する

Apache のデフォルトの設定だと、実際に html ファイルを公開するディレクトリ(ドキュメントルート)は /var/www/html になっています。

今回はこのフォルダは使用しませんので、/var/www/ 配下に vhosts というディレクトリを作成します。

# ディレクトリを作成する
mikdir /var/www/vhosts

VirtualHost の設定

Apache の設定ファイルは /etc/httpd/conf/httpd.conf に記述されています。このファイルが大元ので、/etc/httpd/conf.d//etc/httpd/conf.modules.d などがモジュール(部品)として読み込まれています。

# 設定ファイルの中を確認

cat /etc/httpd/conf/httpd.conf | grep Include

# 抜粋
Include conf.modules.d/*.conf
IncludeOptional conf.d/*.conf

conf.d/ 配下に設置した .conf ファイルが読み込まれるように記述されています。VirtualHost の設定として vhosts.conf を作成して設定を記述していきます。

なお、Include ディレクティブIncludeOptional ディレクティブ の違いですが、IncludeOptional ディレクティブ は設定ファイルが存在していなくてもエラーを発生させることなく読み込みが無視されるという特徴があります。ディレクティブに関しては後ほど解説していきます。

https://httpd.apache.org/docs/current/en/mod/core.html#includeoptional

vim /etc/httpd/conf.d/vhosts.conf
"/etc/httpd/conf.d/vhosts.conf"
# 以下の内容を記述する

<VirtualHost *:80>
  DocumentRoot /var/www/vhosts/sample_laravel/public
  ServerName sample01.example.com
  DirectoryIndex index.php index.html
    <Directory /var/www/vhosts/sample_laravel/public>
      AllowOverride All
      Require all granted
    </Directory>
</VirtualHost>

# httpdを再起動する
sudo systemctl restart httpd

# エラーが出ていないか確認する
sudo systemctl status httpd

Apache の設定ではディレクティブ(Directive)と言う記述をしていきます。ディレクティブとは直訳すると「指示、命令」と言った意味で、ここでは記述した設定をコンピュータに理解させるための書き方になります。

vhosts.conf に設定した内容をまとめていきます。

ディレクティブ名設定内容
VirtualHostバーチャルホストの機能を使用するためのディレクティブ。引数に IP アドレスを指定し、IP アドレスベースで管理することも可能。
DocumentRootindex.html や index.php など、実際に公開されるファイルを配置するディレクトリを指定する。
ServerNameサーバ自身のホスト名を設定する。
DirectoryIndexクライアントが URL にアクセスした際に「/」で終わるディレクトリだった場合に、どのファイルを返すのか設定する。今回では index.hml が存在していればそれを返し、無ければ index.php を返す。
Directoryあるディレクティブの設定を、指定したディレクトリとサブディレクトリのみ適用させるときに使用する
AllowOverride.htaccess ファイルがあった場合に、そのファイル内で宣言されたディレクティブを上書きして読み込むのかどうか設定する。
Requireアクセス制限を設定する。今回の設定では全てのアクセスを許可している。

hosts ファイルを設定する

vhosts.conf で設定したホスト名でアクセスするために、ローカルマシンの hosts ファイルを設定していきます。hosts ファイルとは、IP アドレスとホスト名の対応が書かれており、自分専用の DNS サーバのようなものです。

ここに IP アドレスとホスト名の対応を記述することで、Vagrant 上に構築した開発環境にホスト名でアクセスすることが出来ます(ブラウザの URL 欄に sample01.example.com と打ち込んでアクセスできる)

Windows10 では、C:\Windows\System32\drivers\etc

MacOS では、/etc 配下に hosts ファイルが存在しています。

ディレクトリ内にはファイルが多数存在していますが、hosts ファイルを VS Code などのエディタで開いて、IP アドレスとホスト名を記述します。VS Code で開いた場合は保存時に root ユーザーのパスワードを求められるので入力して保存します。

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
192.168.33.10 sample01.example.com <--- IPアドレスとホスト名を追加
# Added by Docker Desktop
# To allow the same kube context to work on the host and the container:
127.0.0.1 kubernetes.docker.internal
# End of section

プロジェクトを追加する場合は、vhosts.conf の設定を行った後に 192.168.33.10 sample01.example.com の横にホスト名を追加することで、仮想マシンの IP アドレスを変更することなく追加したホスト名でアクセスできます。

Laravel をインストールする

ここでは composer などのパッケージ管理ツールはインストールされたものとして進めていきます。

Laravel に関しては特にバージョンを気にせず最新版をインストールしてみます。

# Laravelの最新版をインストール
laravel new sample01.example.com

laravel の public ディレクトリをドキュメントルートに設定しているので、インストールしただけでトップページにはアクセスできるようになっています。

ブラウザの URL に sample01.example.com と入力してアクセスしてみて下さい。

最後に

今回は VirtualHost を使用した複数の開発環境の構築を行ってきました。仮想マシンをプロジェクトごとに増やさなくて良いのでとても便利な機能だと体感しています。

Apache のバージョンによっては設定ファイルの記述方法など異なってくるので、ドキュメントをしっかり確認しながらエラーと向き合っていくことが大切だなと改めて感じました。