WebサーバーのVirtual Host機能とは?Nginxで試せるサンプルコード付きで解説【ドメイン取得不要】

はじめに

ひとつのWebサーバーで複数のWebアプリが動かせたら便利ですよね。
今回はひとつのWebサーバーで異なるドメインのWebアプリを動かすVirtual Host機能について解説します。インストール済みのNginxがすでに構築済みであれば、すぐに試せるサンプルコード付きです。試すだけならドメインの取得も必要ありません。

  • macOS Catalina
  • CentOS 7.7
  • Nginx 1.16.1

Nginxの設定

まずはリモートサーバーにSSH接続し、管理者ユーザーに変更しましょう。

$ ssh remote-server
$ su -
パスワード:
#

次にNginxの設定ディレクトリに移動し、まずはdomain1.com用の設定ファイルを作ります。
設定ファイルの名前は拡張子が.confであれば何でもいいです。

# cd /etc/nginx
# mkdir conf.d
# cd conf.d
# touch domain1.conf

作成した設定ファイルを変更します。

# vi domain1.conf

以下のように設定します。

server {
  listen 80;
  listen 443;
  server_name domain1.com;
  location / {
    root /var/www/domain1/public;
    index index.html index.htm;
  }
}

設定パラメーターの意味は以下のとおりです。

  • listen:要求ポート
  • server_name:要求ドメイン名
  • location
    • root:Webアプリのドキュメントルート
    • index:Webアプリのインデックスファイル名(優先度の高い順に列挙)

続いてdomain2.com用の設定ファイルを作ります。

# touch domain2.conf
# vi domain2.conf
server {
  listen 80;
  listen 443;
  server_name domain2.com;
  location / {
    root /var/www/domain2/public;
    index index.html index.htm;
  }
}

今回はわかりやすいように、それぞれのドメインに対応した設定ファイルを個別に作成しましたが、もちろんひとつの設定ファイル(例えばdefault.conf)にすべて書いてしまっても問題ありません。
ただ、Webアプリが増えてくれば設定ファイルも長大になりがちなので、わかりやすい単位で設定ファイルを分けるのが無難かと思います。

Webアプリの準備

domain1.comdomain2.com、それぞれのWebアプリを準備します。
サンプルなのでドキュメントルートに簡単なindex.htmlを作るだけです。

# cd /var/www/domain1/public
# touch index.html
# vi index.html
<h1>Hello domain1!</h1>

同様にdomain2.comも作成します。

# cd /var/www/domain2/public
# touch index.html
# vi index.html
<h1>Hello domain2!</h1>

Virtual Hostの設定は以上です。

hostsの設定

動作確認を行う前に、ローカル(⚠ リモートサーバーではありません)のhostsに設定を追加します。
これはあくまで動作確認のための設定ですので、本番環境ではちゃんとドメイン取得を行う必要があります。

ターミナルを開き、以下のコマンドを実行します。

$ sudo vi /private/etc/hosts

hostsファイルの末尾に以下を追加します。
xxx.xxx.xxx.xxxはリモートサーバーのIPアドレスを設定してください。

...
xxx.xxx.xxx.xxx domain1.com
xxx.xxx.xxx.xxx domain2.com

動作確認

いよいよ動作確認です。
ウェブブラウザからhttp://domain1.com/index.htmlにアクセスしてみましょう。

今度はhttp://domain2.com/index.htmlにアクセスしてみます。

それぞれのHTMLファイルが受け取れていますね!

まとめ

WebサーバーのVirtual Host機能は便利な機能ですが、デメリットもあります。
それは、動かすWebアプリが増えれば増えるほど、ひとつのWebアプリにおけるWebサーバーのパフォーマンスが落ちていくということです。
WebサーバーのVirtual Host機能を使うときは、Webアプリの稼働率(≒アクセス数)とサーバーの性能を慎重に見極めるようにしましょう。

関連記事

CentOSにWordpressをインストールしてNginxで動かす方法【Virtual Host対応】
# はじめに 仕事でVPSサーバー上にWordpressを構築する機会があったので手順に残したいと思います。VPSサーバーでは既にRuby on Railsで作成したWebアプリが稼働していたので、NginxのVirtual Host機能で複数ド [...]
2019年12月10日 17:33
【完全無料でSSL化】RailsアプリをNginxで動かす!Nginxのインストール方法から最低限しておきたい設定まで
RailsアプリをNginxで動かすために、Nginxをサーバーに導入する方法と最低限これだけはしておきたいという設定をまとめます。 • ローカル環境:macOS Catalina • サーバー環境:CentOS 7.7 Nginxインストール [...]
2019年12月5日 11:06
「HTTP (TCP/80)/HTTPS (TCP/443)」「サブドメイン(www)あり/なし」の違いによるアクセスを一本化
ウェブサイトのURLは「HTTP (TCP/80)/HTTPS (TCP/443)」「サブドメイン(www)のあり/なし」を組み合わせた4パターンが考えられます。 当ポートフォリオサイトの場合、以下の4つのURLでアクセスされる可能性があるというこ [...]
2019年12月2日 23:37
SSL通信時にセッションを暗号化する方法
以前、「Let's Encryptを使用したWebサーバーのSSL化」という記事を書きました。 実はこの設定だけでは不十分だったので、今回はその続きを書きます。 セッションが保存されない このポートフォリオサイトでは管理者のみがログインできる機能 [...]
2019年10月24日 17:12