【Apache】VirtualHostを使ってみよう

# はじめに

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

## Aliasとは何が違うのか？
複数のAliasを設定した場合と似てるのでは？と最初思ったのですが、
Aliasが一つのウェブサイトの中で違うページのものを違うディレクトリに置いてるのに対し、
VirtualHostで別個のウェブサイトを一つのマシン上で扱っているということになります。

## VirtualHostの種類
- IP ベース：各ウェブサイトに違う IP アドレスがあるバーチャルホスト
- 名前ベース：それぞれの IP アドレスに 複数の名前があるバーチャルホスト

今回は名前ベースのバーチャルホストを扱います。

# 前提
下記記事で構築した環境を前提とします。

- Windows10にVagrantをを入れてCentOS7をインストールしよう([1](https://qiita.com/erik_t/items/d7f7abbf7deafa4c6fe4)、[2](https://qiita.com/erik_t/items/909efb63fd389f486ec3)、[3](https://qiita.com/erik_t/items/2e3c43cfe8731621b82d)、[4](https://qiita.com/erik_t/items/8d006b599815c8fbf38b)、[5](https://qiita.com/erik_t/items/9fbe7b5630b1f62893a1)、[6](https://qiita.com/erik_t/items/11f24633f4248e4f33f0)) 
- ローカルでLAMP環境を構築しよう（[0](https://qiita.com/erik_t/items/9c7c49db061a250cbc32)、[1](https://qiita.com/erik_t/items/e36235896b327f5cb461)、[4](https://qiita.com/erik_t/items/a898d0f547bff6b3d8ff)）

# 使用ツール
- Tera Term

# 手順
[1. 【サーバー側】コンテンツ準備](https://qiita.com/erik_t/items/63f079826a60aaa642d3#1-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E5%81%B4%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E6%BA%96%E5%82%99
)
[2. 【ローカル側】設定変更](https://qiita.com/erik_t/items/63f079826a60aaa642d3#2-%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E5%81%B4%E8%A8%AD%E5%AE%9A%E5%A4%89%E6%9B%B4)
[3. 【サーバー側】バーチャルホストの設定](https://qiita.com/erik_t/items/63f079826a60aaa642d3#3-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E5%81%B4%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%AB%E3%83%9B%E3%82%B9%E3%83%88%E3%81%AE%E8%A8%AD%E5%AE%9A)
[4. 【ローカル側】動作確認](https://qiita.com/erik_t/items/63f079826a60aaa642d3#4-%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E5%81%B4%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D)

# やってみよう
## 1. 【サーバー側】コンテンツ準備
下記のサイト構成でcentos7のほうに表示用のコンテンツを用意します。
まんま[参考サイトさん](https://qiita.com/torshim/items/f4fa3aa62174bca47709)の通り。

```
var/www/html
         ├ index.html …➀
         ├ site_a
         │  └ index.html…➁
         └ site_b
            └ index.html…➂
```
上記の➀～➂のファイルを下記のように記述します。

```:➀のindex.html
<meta charset="UTF-8">
<title>テスト</title>
<body>
<h1>This is other SITE!</h1>
</body>
```

```:➁のindex.html
<meta charset="UTF-8">
<title>テスト</title>
<body>
<h1>This is SITE A!</h1>
</body>
```

```:➂のindex.html
<meta charset="UTF-8">
<title>テスト</title>
<body>
<h1>This is SITE B!</h1>
</body>
```
## 2. 【ローカル側】設定変更
`C:\Windows\System32\drivers\etc\hosts`の設定を下記のように変更します。
IPアドレスの`192.168.33.1`は各自環境で読み替えてください。
私はcentos7にも`\etc\hosts`があるから
そっちを直してしまって「？？？？？」ってなっていました。愚か！

```:hosts
      192.168.33.1     a.test
      192.168.33.1     b.test
      192.168.33.1     hoge.test
```
これで、`http://192.168.33.1`と`http://a.test`が同じ結果を表示します。
もちろん`http://b.test`、`http://hoge.test`も同様。
今のところどれにアクセスしても➀のファイルが表示されます。
[3. 【サーバー側】バーチャルホストの設定]()で
`http://a.test`、`http://b.test`、`http://hoge.test`の表示結果が変わります。

## 3. 【サーバー側】バーチャルホストの設定
centos7に`/etc/httpd/conf.d/vhost.conf`を作成し、以下のように記述します。
パスは`/etc/httpd/conf.d/`でないとダメですが、ファイル名は拡張子が`.conf`であればなんでもよいです。

```:vhost.conf
<VirtualHost *:80>
  ServerName any
  DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost *:80>
  ServerName a.test
  DocumentRoot /var/www/html/site_a
</VirtualHost>
<VirtualHost *:80>
  ServerName b.test
  DocumentRoot /var/www/html/site_b
</VirtualHost>
```
下記のコマンドで、`vhost.conf`の文法に問題がないかチェックします。
`Syntax OK`と表示されればOKです。

```
apachectl configtest
```

下記のコマンドで、httpdを再起動します。

```
systemctl restart httpd
```
## 4. 【ローカル側】動作確認
ローカルのブラウザで`http://a.test`、`http://b.test`、
`http://hoge.test`をそれぞれ表示してみましょう。
`http://a.test`で➁のファイル、`http://b.test`で➂のファイル、
`http://hoge.test`で➀のファイルが表示されれば成功です。

# 補足：3. 【サーバー側】バーチャルホストの設定について
[3. 【サーバー側】バーチャルホストの設定](https://qiita.com/erik_t/items/63f079826a60aaa642d3#3-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E5%81%B4%E3%83%90%E3%83%BC%E3%83%81%E3%83%A3%E3%83%AB%E3%83%9B%E3%82%B9%E3%83%88%E3%81%AE%E8%A8%AD%E5%AE%9A)では、
`/etc/httpd/conf.d/vhost.conf`というファイルを作成しましたが、
ファイルを作成せず、下記のように`/etc/httpd/conf/httpd.conf`を編集するやり方もあるようです。
詳しくは[こちらのサイト](https://kde.hateblo.jp/entry/2018/02/04/002626)で。

```:/etc/httpd/conf/httpd.conf
(略)...

# Further relax access to the default document root:
<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>

# 適当なサーバ名を設定
serverName testserver

<VirtualHost *:80>
  ServerName any
  DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost *:80>
  ServerName a.test
  DocumentRoot /var/www/html/site_a
</VirtualHost>
<VirtualHost *:80>
  ServerName b.test
  DocumentRoot /var/www/html/site_b
</VirtualHost>

(略)...
```
どう使い分けるとかあるんでしょうか。
あと、↓はなくても大丈夫でした。

```
# 適当なサーバ名を設定
serverName testserver
```
# 参考サイト
[Apache バーチャルホスト説明書](https://httpd.apache.org/docs/2.4/ja/vhosts/)
[ApacheのVirtualHostってなんだ](https://qiita.com/monaky/items/b5f589e59ee002a1d355)
[Apache2.4でバーチャルホストの設定（超初級）](https://qiita.com/torshim/items/f4fa3aa62174bca47709)
[Vagrant内でVirtualHostを設定する](https://kde.hateblo.jp/entry/2018/02/04/002626)

# 関連ページ
## Windows10にVagrantをを入れてCentOS7をインストールしよう
[1. VagrantインストールからVagrantfileを設置まで](https://qiita.com/erik_t/items/d7f7abbf7deafa4c6fe4)
[2. 仮想マシンの操作](https://qiita.com/erik_t/items/909efb63fd389f486ec3)
[3. WinSCP、Tera Termに秘密鍵でログイン ](https://qiita.com/erik_t/items/2e3c43cfe8731621b82d)
[4. WinSCP、Tera Termにrootユーザーでパスワードログイン](https://qiita.com/erik_t/items/8d006b599815c8fbf38b)
[5. zip/unzipをインストール](https://qiita.com/erik_t/items/9fbe7b5630b1f62893a1)
[6. Vagrantにて仮想環境を配布](https://qiita.com/erik_t/items/11f24633f4248e4f33f0)

## ローカルでLAMP環境を構築しよう
[0. 事前準備](https://qiita.com/erik_t/items/9c7c49db061a250cbc32)
[1. Apacheをインストール](https://qiita.com/erik_t/items/e36235896b327f5cb461)
[4. ファイアウォールとか停止する](https://qiita.com/erik_t/items/a898d0f547bff6b3d8ff)

## Apache
[DocumentRootを変更しよう](https://qiita.com/erik_t/items/d8f4746d2dc2992f329e)
[Aliasを使ってみよう](https://qiita.com/erik_t/items/8d463596f1660290e8a3)
VirtualHostを使ってみよう

## おすすめ参考書
[サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)](https://amzn.to/3ITR7nZ)

## 閑話休題
最近の悩みはエンジニアの職業病である肩こりです。。。
私は[コリコラン](https://amzn.to/42S8oVT)を友人から教えてもらって愛用していますが結構効いてます！
[専用シール](https://amzn.to/3qZSdsi)もあると便利なのでおすすめです。
みなさんでもぜひ！