【Nginx】バーチャルホストで複数のドメインを設定する

Nginxで複数ドメインを振り分ける際に、バーチャルホストというものを設定しました。

Nginxの挙動が学べたのでまとめてみます。

結論

先に結論から。

やること
  1. /etc/nginx/site-available配下にホスト情報を設置
  2. /etc/nginx/site-enabled配下にシンボリックリンクを配置
  3. ドキュメントルートを作成
Nginxの挙動
  1. Nginx起動
  2. nginx.confをロード
  3. httpブロック内のincludeをロード
  4. /etc/nginx/site-enabled配下をロード
  5. 「hoge.example.com」,「fuga.example.com」ファイルをロード
  6. バーチャルホストが2つ生成される

前提

  1. Nginxをインストール済み
  2. DNS設定が完了している(複数ドメインで同一サーバにアクセス出来る)

Nginxのバーチャルホスト

同一のサーバで複数のドメインを振り分けるには、バーチャルホストという仕組みを用います。

バーチャルホストとは、ドメイン毎にサーバーの処理を振り分けるものです。

ドメイン毎に違う処理を行うので、あたかも複数のサーバに見える(仮想的)、というのが名前の由縁なのだと思います。

では、Nginxのバーチャルホストの設定を見ていきます。

$ vi /etc/nginx/nginx.conf

...
http {

    ...
    # このserverブロックがホストの設定
    server{
    listen 80;
    root /var/www/html;
    server_name hoge.example.com;
    }
    ...

    # ここで他のホストを呼び出している
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
    ...
}

このように、serverブロックを複数指定することで、ドメイン名(server_name)毎に処理を分けれます。

複数ドメインを設定

以下、ホスト追加の手順です。

  1. /etc/nginx/site-available配下にホスト情報を設置
  2. /etc/nginx/site-enabled配下にシンボリックリンクを配置
  3. ドキュメントルートを作成

では、追加のホスト情報を作成していきます。

なお、ドメインは「hoge.example.com」と「fuga.example.com」を設定します。

$ vi /etc/nginx/sites-available/hoge.example.com

server {
    # ポート指定(ipv4とipv6)
    listen 80;
    listen [::]:80;

    # ドキュメントルートを指定
    root /var/www/hoge/html;

    # 最初に処理するファイルを指定
    index index.html index.htm index.nginx-debian.html;

    # ドメインを指定
    server_name  hoge.example.com;

    # ファイルとディレクトリがない場合、404を返す
    location / {
        try_files $uri $uri/ =404;
    }
}

同様にfuga.example.comも作成し、「root」と「server_name」だけ変更してください。

次に、これら2つのファイルが、Nginxに読み込まれるように配置します。

# hoge.example.comを配置
$ sudo ln -s /etc/nginx/sites-available/hoge.example.com /etc/nginx/sites-enabled/

# fuga.example.comを配置
$ sudo ln -s /etc/nginx/sites-available/fuga.example.com /etc/nginx/sites-enabled/

また、ドキュメントルートに設定したディレクトリを作成しておきます。

# ドキュメントルート作成
$ sudo mkdir -p /var/www/hoge/html
$ sudo mkdir -p /var/www/fuga/html

# 所有権変更
$ sudo chown -R $USER:$USER /var/www/hoge/html
$ sudo chown -R $USER:$USER /var/www/fuga/html

# 権限変更(所有者のみ書き込み可能にする)
$ sudo chmod -R 755 /var/www/hoge/html
$ sudo chmod -R 755 /var/www/fuga/html

# indexを作成(どこにアクセスしているか分かりやすいように内容を記入してください)
$ vi /var/www/hoge/html/index.html
$ vi /var/www/fuga/html/index.html

# 最後にnginx再起動
$ sudo systemctl restart nginx

これでドメイン毎に処理を振り分けることが出来るはずです。ブラウザで確認してみてください。

まとめ

Nginxの処理の流れをまとめます。

  1. Nginx起動
  2. nginx.confをロード
  3. httpブロック内のincludeをロード
  4. /etc/nginx/site-enabled配下をロード
  5. 「hoge.example.com」,「fuga.example.com」ファイルをロード
  6. バーチャルホストが2つ生成される

これにより、ドメイン毎にサーバの処理を振り分けることが出来ます。

参考資料

  1. Nginx基本設定
  2. SSL化する場合、参考になると思います