Vagrantを使ってNginxのバーチャルホストを試してみる

/

導入

Nginxには1つのサーバーで複数のドメインを運用できるバーチャルホスト(マルチドメイン)の機能があります。
バーチャルホストを使えばソフトウェアの設定で複数のサイトの運用が可能になって便利なのでVagrantを使ってNginxのバーチャルホストを試してみました。

実行環境

VirtualBox 5.0.24
Vagrant 1.8.7
HostOS ubuntu16.04
GuestOS ubuntu16.04
Nginx 1.10.0

Vagrant&VirtualBox

VagrantやVirtualBoxのインストールについては以前取り上げたので今回は割愛します。
Vagrant(&VirtualBox)で作る仮想開発環境/Koltatt

HTML

バーチャルホストで表示させるためサイトとして/var/www/html/に各ホストごとにHTMLファイルを用意します。

<!DOCTYPE html>
<html>
  <head>
     <meta charaset="utf-8">
     <title>Virtual Host1</title>
  </head>
  <body>
  <h1>Virtual Host1</h1>
  </body>
</html>

virtual_host1同様にvirtual_host2とvirtual_host3にもタイトルと見出しを変更してindex.html作成します。

├─ virtual_host1
│  └─ index.html
│
├─ virtual_host2
│  └─ index.html
│
└─ virtual_host3
   └─ index.html

Nginx

https://nginx.org

インストール

$ apt-get install nginx
# Nginxのserviceの起動
$ systemctl start nginx.service
# Nginxの自動起動を設定
$ systemctl enable nginx

AnsibleでVagrantのubuntu16.04環境にPHP7とNginxをインストールする/Koltatt

設定

Nginxではバーチャルホストの設定ファイルを/etc/nginx/sites-available/に配置しますが、設定ファイルを直接読み込まずに/etc/nginx/sites-enabled/に貼ったシンボリックリンクから各ホストの設定ファイルを読み込みます。

シンボリックリンク経由で設定を読み込むようにする事で、シンボリックリンクを削除・作成すればバーチャルホストのサイトを簡単に閉鎖・再開する事が出来るようになっています。

sites-available

各ホストの設定ファイルをドメイン毎に分けて/etc/nginx/sites-availableに配置します。

$ vi /etc/nginx/sites-available/virtual_host1.com
# virtual_host1.com
server {
    listen 80;
    server_name virtual_host1.com;

    access_log  /var/log/nginx/access.virtual_host1.com.log;
    error_log   /var/log/nginx/error.virtual_host1.com.log;

    location / {
        root   /usr/share/nginx/html/virtual_host1.com;
        index  index.html;
    }
}

virtual_host2.com、virtual_host3.comもサーバーネームやロケーションを変更して同様にファイルを作成します。

$ ls /etc/nginx/sites-available
default virtual_host1.com virtual_host2.com virtual_host3.com 

またバーチャルホストではアクセスログなどのログファイルをドメイン毎に分けて保存する事が出来ます。

sites-enable

各ホストの設定ファイルを作成したら、site-enabledにシンボリックリンクを貼ります。

$ ln -s /etc/nginx/sites-available/virtual_host1.com /etc/nginx/sites-enabled/
$ ln -s /etc/nginx/sites-available/virtual_host2.com /etc/nginx/sites-enabled/
$ ln -s /etc/nginx/sites-available/virtual_host3.com /etc/nginx/sites-enabled/

シンボリックリンクを貼った後はデフォルトで既に設定されているかもしれませんがsites-enabledを読みこむように/etc/nginx/nginx.confに以下の一行を設定します。

include /etc/nginx/sites-enable/*;
#nginxの再起動
$ systemctl restart nginx

Vagrant

サーバー側の準備が完了したらVagrantで作った仮想マシンに複数のドメインでアクセスするためにVagrantにプラグインのhostsapdterを追加し、アライアス機能を使うためにVagrantfileを以下のように設定します。

#hostsupdaterのインストール
$ vagrant plugin install vagrant-hostsupdater
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.hostname = "virtual_host.com"
config.hostsupdater.aliases = ["virtual_host1.com","virtual_hots2.com","virtual_host3.com"]
$ vagrant reload

Vagrantの再起動後にブラウザからそれぞれのアドレスに接続するとNginxで設定した各ホスト毎のHTMLファイルが表示されるのが確認出来ます。

Virtual Host1
Virtual Host1
Virtual Host2
Virtual Host2
Virtual Host3
Virtual Host3

あとがき

最初はsites-enabledとsites-availableがあって面くらいましたが、一度理解してしまえばシンボリックリンクによってサイトの閉鎖と再開が簡単に出来るので便利に設定されてると思いました。
バーチャルホストの設定はNginxのほうが簡単だと聞いたのでApacheよりも先に試してみましたが、今回Nginxが上手くいったのでそのうちApacheのバーチャルホストも試してみたいと思います。