さくらVPSでマルチドメイン(バーチャルホスト、Virtual Host)設定

はじめての!さくらVPSでマルチドメイン

#やりたいこと

- サーバ代節約のためにマルチドメインの設定
- ひとつのIPアドレスでマルチドメインにする【名前ベース】の設定方法
- うち、1ドメインはJavaをTomcatで利用している
    - ドメイン1.com(java使ってるサイト)
    - ドメイン2.com(普通のhtmlだけのサイト)

#環境
- CentOS7
- Apache2.4.6

 [さくらVPSにJava実行環境を構築する](https://qiita.com/otsuno/items/d474cb93522206bc8aa9)
[データベースを使ったJavaプロジェクトを前回までにVPSに作ったサーバへ配置](https://qiita.com/otsuno/items/3e37fc556244a1694c93)

で、作った環境を引き続き使っていきます。

#ドメインの取得、設定
ドメインはどこか適当なサイトで事前に取得しておきます。趣味や勉強で作ったサイト程度なら無料の独自ドメインサービスを使うのもありだと思います。設定が反映されるまで数時間かかります。毎回だいたい3時間くらいです。長いと数日かかることもあるらしいです。

- 無料のドメインサービス[freenom](https://my.freenom.com/)


###ドメインとったサイトでの作業

ドメインとったサイトでさくらのネームサーバの設定をしておく。
下図は[freenom](https://my.freenom.com/)の画面。

- ネームサーバー1	ns1.dns.ne.jp
- ネームサーバー2	ns2.dns.ne.jp

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223715/2dae6a86-c416-5329-cdc3-c7617ec7ee4d.png)

###さくら側の作業

さくらのコンパネでネームサーバの設定をしておく。
新しいネームサーバの登録＞追加したい独自ドメインを記述＞IPアドレスを記述
https://secure.sakura.ad.jp/menu/domain/zoneadd.php
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223715/1b70322c-b2c0-d599-3056-fcf57817e0f6.png)



#Virtual Hostの設定
安全を考慮すると設定ファイルを分けたほうがいいのですが、ファイル増やしたのすぐ忘れる性格なのでここではhttpd.confの下部に記述する方法でやっています。

###httpd.confのバックアップを保存
設定をミスして何かあったときに（だいたい急に表示されなくなる。とても焦る）戻せるようにバックアップをとっておきます。
`date "+%Y%m%d_%H%M%S"`でバックアップの日付をファイル名に追加しています。

```
# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.`date "+%Y%m%d_%H%M%S"`
```

###httpd.confを開く

```
# vi /etc/httpd/conf/httpd.conf
```
###コマンドメモ
検索　/
一番下に行く　G

```httpd.conf
#ServerName www.example.com:80　　　// 編集前
NameVirtualHost *:80　// 編集後
```
下記の記述。どこでもいいけどわかりやすいように私はNameVirtualHost *:80の下に記述しました。

```httpd.conf
Listen 80
```
###各ドメインの設定
フォルダは先に作成しておきます。

- DocumentRoot　ドメインのルートフォルダ
- ServerName　ドメイン名

最下部へ追記
domain1.comのdomainにはJavaを使ったアプリが配備してあるのでTomcat側へアクセスを飛ばす設定`ProxyPass / ajp://【VPSのIPアドレス】:8009/`をしています。両方ともJava使わないサイトの場合は記述は必要ないです。

```httpd.conf

<VirtualHost *:80>
  ServerName domain1.com
  DirectoryIndex index.html index.php
  AddDefaultCharset UTF-8
  DocumentRoot /var/www/html/domain1com/
  <Directory "/var/www/html/domain1com/">
    AllowOverride All
    Require all granted
  </Directory>
  ProxyPass / ajp://【VPSのIPアドレス】:8009/
</VirtualHost>

<VirtualHost *:80>
  ServerName domain2.com
  DirectoryIndex index.html index.php
  AddDefaultCharset UTF-8
  DocumentRoot /var/www/html/domain2com/
  <Directory "/var/www/html/domain2com/">
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

```

保存して再起動で完了です。

#【宿題】まだよく分かっていないこと
今後2つ以上のドメインでJava使いたいたい場合はどうするんだろうと調べていたらTomcat側でバーチャルホストの設定が必要らしいと設定終わってから知った。`ProxyPass / ajp://【VPSのIPアドレス】:8009/`追記じゃなくてはじめっからTomcat側だけの設定でよかったのかな。

[Tomcat9 バーチャルホストを設定する](https://www.javalife.jp/2018/04/11/tomcat9-%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%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B/)

ドメイン増えたらためしてみます。









#参考
バーチャルホストの例
https://httpd.apache.org/docs/trunk/ja/vhosts/examples.html
名前ベースのバーチャルホスト
https://httpd.apache.org/docs/2.4/ja/vhosts/name-based.html
Apache httpd と Tomcat を連携させる方法
https://weblabo.oscasierra.net/tomcat-mod-proxy-ajp/
Tomcat9 バーチャルホストを設定する
https://www.javalife.jp/2018/04/11/tomcat9-%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%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b/