単一の公開IPアドレスを持つサーバーで複数のドメインまたはサブドメインをホストする必要がありますか?どうしますか?このシナリオは初心者にとっては混乱するかもしれません。しかし心配しないでください、このチュートリアルでそれをカバーしますので、単一のIPアドレスでNGINXサブドメインと複数のドメインを提供できます。
このチュートリアルでは、単一のIPアドレスを持つサーバーで効果的にNGINXサブドメインまたは複数のドメインを提供する方法を学びます!
準備ができたら、始めましょう!
前提条件
このチュートリアルには実践的なデモが付属していますが、多くの前提条件は必要ありません。Ubuntu Server LTSがSSH有効化され、NGINXがインストールされているものと想定します。このチュートリアルのデモはUbuntu Server LTS 20.04.1で行われます。
DNSレコードの設定
NGINXのサブドメインまたは複数のドメインを提供するには、DNSコントロールパネルにAレコードを追加する必要があります。Aレコードは、すべてのドメインとサブドメインを単一のIPアドレスにバインドし、Webブラウザがウェブサイトを見つけることができるようにします。
1. お気に入りのウェブブラウザを起動し、DNSコントロールパネルにログインします。
2. レコードの追加をクリックして、Aレコードの追加を開始します。ウェブブラウザは、ドメインとサブドメインのDNS設定を構成するページにリダイレクトされます。

以下のようにDNS設定を構成します:
タイプフィールドで A レコードを選択します。
ホストフィールドに @ を入力し、値フィールドにサーバーのIPアドレスを入力します。
TTL フィールドで適切な値を選択し、確認 ボタンをクリックして設定を保存します。
他のサブドメインに対しても同じ手順を繰り返します。

最終的な DNS設定 ページは以下のようになります。

DNSレコードの制御パネルの機能やデザインは異なる場合がありますが、原則はすべてに適用されます。
NGINXドメインとサブドメインのウェブディレクトリの設定
ドメインとサブドメインのAレコードを追加したので、それぞれのウェブディレクトリを設定する時がきました。NGINXにはデフォルトの仮想ホストファイルがあり、/usr/share/nginx/htmlにあるウェブディレクトリを提供するように設定されています。
NGINXのデフォルトドキュメントルート(/var/www/html)内に、各ドメイン用に別々のウェブディレクトリを作成します。
1. まず、ターミナルを開き、以下のコマンドを実行して、全てのドメインとサブドメインのためのウェブディレクトリを作成してください。これにより、各ウェブサイトのファイルが分離・整理・隔離されます。
2. 次に、以下のコマンドを実行して、ステップ1で作成した各ディレクトリの所有権を再帰的に(-R
)www-data
ユーザーとグループに変更してください。NGINXはwww-data
ユーザーとして実行されるため、各ディレクトリの所有権をwww-data
ユーザーとグループに変更します。
3. 好みのコードエディタでindex.htmlという名前のファイルを作成し、以下のコードをindex.htmlファイルにコピーして貼り付けてください。ファイルを/var/www/html/awstutorial.netという各ドメインの主要なウェブディレクトリ内に保存してください。
以下のHTMLコードは、index.htmlファイルがウェブブラウザで開かれたときに「おめでとうございます!awstutorial.netのウェブサイトが動作しています!」というメッセージを表示します。
4. 最後に、同じようにindex.htmlを/var/www/html/web1.awstutorial.netおよび/var/www/html/web2.awstutorial.netディレクトリに作成してください。ただし、各index.htmlのコード内のawstutorial.net
をweb1.awstutorial.net
およびweb2.awstutorial.net
に置き換えてください。
NGINXのドメインとサブドメインのための仮想ホストの設定
既に、ドメインとサブドメインのためのindex.htmlページがNGINXウェブサーバーを通じて提供されるようになっています。次のステップでは、各ドメインのためにNGINXの仮想ホスト設定ファイルを作成し、HTMLページを提供します。
1. 好みのコードエディタでawstutorial.netという名前のNGINX仮想ホスト設定ファイルを作成し、以下のコードをそのファイルにコピー/貼り付けします。ファイルを/etc/nginx/sites-available/ディレクトリに保存してください。
以下のコードは、サーバーの動作を制御します。ユーザーがドメインにアクセスしようとした場合のサーバー名やインデックス(ホーム)ページなどです。
2. 次に、以下のnginx
コマンドを実行して、NGINXの設定ファイルに構文エラーがないかを確認します(-t
)。
NGINXの設定ファイルに構文エラーがない場合、以下の出力が表示されます。

3. 次に、以下のコマンドを実行して、/etc/nginx/sites-availableから/etc/nginx/sites-enabled/ディレクトリへのシンボリックリンク(ln -s
)を作成します。このコマンドにより、awstutorial.netの仮想ホスト構成ファイルが有効になります。
sites-availableとsites-enabledの形式は、NGINX Ubuntuインストール内で標準的ですが、他のディストリビューションでは異なる標準が使用される場合があります。
4. 1から3までの手順を繰り返して、NGINXの仮想ホスト構成ファイルweb1.awstutorial.netとweb2.awstutorial.netを作成します。
各NGINXの仮想ホスト構成ファイルの次の行を変更してください:
- 行
root /var/www/html/awstutorial.net
をそれぞれのサブドメインのウェブルートディレクトリに置き換えます(root /var/www/html/web1.awstutorial.net
およびroot /var/www/html/web2.awstutorial.net
)。 - 行
server_name awstutorial.net
を各サブドメインの名前に置き換えます(server_name web1.awstutorial.net
およびserver_name web2.awstutorial.net
)。
5. さて、ステップ3と同様に、以下のsudo ln
コマンドを実行して仮想ホスト構成ファイルを有効にします。
6. 以下のsystemctl
コマンドを実行してNGINX (restart nginx
) サービスを再起動し、すべての設定変更を適用します。
7. 最後に、ブラウザでドメインとサブドメインのURLに移動して、ウェブサイトが正常に動作するかテストします。
ドメインとサブドメインが読み込まれると、以下のようなメッセージが表示されます。

NGINXドメインとサブドメインのHTTPS設定
HTTPプロトコルでNGINXドメインとサブドメインを正常に設定してテストしましたが、ドメインとサブドメインの接続をHTTPSで保護する必要があります。どうやって? Let’s Encrypt SSLのような証明機関から取得する証明書を使用します。
1. 最初に、以下のコマンドを実行してCertbotソフトウェアパッケージをインストールします(apt-get install certbot
)。Certbotを使用してドメインとサブドメインのためのSSL証明書をダウンロードできます。
2. 次に、以下のcertbot
コマンドを実行して、ドメイン(-d awstutorial.net
)のSSL証明書(certonly
)をダウンロードします。利用規約に同意すること(—agree-tos
)と、メールアドレスを入力すること(—email
)に注意してください。
メールアドレスを自分のものに置き換えてください。
3. 以下に示すように、NGINX Webサーバープラグイン (nginx)を選択するために‘1’を入力し、ACME CAで認証します。

NGINX Webサーバープラグインを選択すると、ドメイン(awstutorial.net)のSSL証明書のダウンロード進捗状況が表示されます。
デフォルトでは、Let’s EncryptのSSL証明書は/etc/letsencrypt/live/ディレクトリに保存されます。

4. ステップ2で行ったのと同様に、以下のコマンドを実行して残りのサブドメイン(web1.awstutorial.net
とweb2.awstutorial.net
)のSSL証明書をダウンロードします。
5. 最後に、以下のls
コマンドを実行して、/etc/letsencrypt/live/ディレクトリ内の名前にawstutorial.net
を含む(*
)すべてのSSL証明書を一覧表示します。これにより、SSL証明書が存在することを確認できます。
以下に、ドメインとサブドメインのSSL証明書が表示されます。

NGINX仮想ホストの設定にSSL証明書を使用する
この時点では、すでにSSL証明書を手に入れています。しかし、ドメインとサブドメインを安全にするためにそれらをどのように使用するのでしょうか?それぞれのNGINX仮想ホスト構成ファイルのserver
ブロック内で証明書のパスを定義します。
1. 好きなコードエディタで、/etc/nginx/sites-available/
ディレクトリにあるawstutorial.netのNGINX仮想ホスト構成ファイルを開きます。
2. 以下のコードでファイルの内容を置き換えます。SSL証明書のパスとSSLプロトコル(Path of the SSL certificate
の下)を定義します。
3. 残りの仮想ホスト構成ファイル(web1.awstutorial.netおよびweb2.awstutorial.net)に対して同じ手順(ステップ1から2)を繰り返します。ただし、SSL証明書のパスはPath of the SSL certificate
の下にあるサブドメインの証明書のパスに置き換えてください。
4. 構成の変更を適用するために、以下のsystemctl
コマンドを再実行してNGINXサービスを再起動します。
5. 最後に、ウェブブラウザでドメインとサブドメインのURLに移動します。ただし、今回はHTTPプロトコルではなく、HTTPSを使用して動作するか確認します。
以下のアドレスバーには、SSL証明書で保護されたウェブサイトを示す南京錠のアイコンが表示されます。

結論
このチュートリアルでは、仮想ホスト構成ファイルを設定してNGINXのサブドメインまたは複数のドメインを提供する方法について学びました。また、仮想ホスト構成ファイルで定義したSSL証明書を使用してドメインを保護する方法にも触れました。
さあ、なぜこのセットアップをプロダクション環境で使用しないのですか?たとえば、単一のサーバー上で複数のアプリをホストし、手頃な価格のウェブホスティングを提供するために。