環境
- macOS Monterey v12.1
- Vagrant v2.3.1
- CentOS 7
- Apache 2.4.6 (CentOS)
VirtualHostとは?
1つのコンピュータで2つ以上のウェブサイトを扱えるようにする設定。
それぞれウェブサイトを配置するディレクトリを作成し、決定する作業が必要になる
※設定ファイル→/etc/httpd/conf/httpd.conf
DocumentRootとは?
Web上に公開されるディレクトリ。
基本的にはDocumentRoot配下にあるファイルが表示される
※ドキュメントルートディレクトリ→/var/www/html
ファイルの準備
DocumentRootのディレクトリを確認する
$ vagrant up
$ vagrant ssh
$ grep -i 'DocumentRoot' /etc/httpd/conf/httpd.conf
# DocumentRoot: The directory out of which you will serve your
DocumentRoot "/var/www/html"
# access content that does not live under the DocumentRoot.
DocumentRootのディレクトリの/var/www/html
内にディレクトリとファイルを作成する。
それぞれのindex.htmlにはわかりやすいようにviエディタで<h1>Site A</h1>
などを記述する。
※後ほどブラウザで表示するため
var/www/html
├ index.html
├ site_a
│ └ index.html
└ site_b
└ index.html
hostsの設定
Macのローカルでterminalを立ち上げ、hostsファイルの設定を変更していく
※IPアドレスと文字列を紐づけ、同じIPアドレスでも表示するページを区別させるため。
$ sudo vi /private/etc/hosts
以下の内容を記述。
※IPアドレスは自身の仮想環境のプライベートIPアドレスを使用。
192.168.56.10 a.test
192.168.56.10 b.test
192.168.56.10 hoge.test
VirtualHostの設定(httpd.conf)
httpd.confファイルにVirtualHostsの設定を記述する。
※バックアップも念の為しておく
$ sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bk
$ sudo vi /etc/httpd/conf/httpd.conf
以下VirtualHostの設定を追記
略)...
<Directory "/var/www/html">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
#
# Controls who can get stuff from this server.
#
Require all granted
</Directory>
# --------------------------------
# VirtualHost setting
<VirtualHost *:80>
DocumentRoot "/var/www/html"
ServerName hoge.test
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/html/site_a"
ServerName a.test
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/html/site_b"
ServerName b.test
</VirtualHost>
# --------------------------------
略)...
Apacheの再起動
$ sudo systemctl restart httpd
VirtualHostの確認
以下サイトにブラウザからアクセスし、それぞれ違うページが表示されるか確認。
- a.test
- b.test
- hoge.test
これで同じIPアドレスなのに、違うページを表示することができました。
hostsの設定に関しては忘れないうちに消しておいてください。