序章

Nginx Webサーバーを使用する場合、サーバーブロック(Apacheの仮想ホストと同様)を使用して、構成の詳細をカプセル化し、単一のサーバーで複数のドメインをホストできます。

このガイドでは、Ubuntu16.04サーバー上のNginxでサーバーブロックを構成する方法について説明します。

前提条件

root以外のユーザーを使用します sudo このチュートリアル全体の特権。 このようなユーザーが構成されていない場合は、Ubuntu16.04初期サーバーセットアップガイドに従って作成できます。

また、サーバーにNginxをインストールする必要があります。 次のガイドでこの手順を説明します。

これらの要件を満たしたら、このガイドを続けることができます。

構成例

デモンストレーションの目的で、Nginxサーバーで2つのドメインを設定します。 このガイドで使用するドメイン名は、example.comtest.comです。

注: DigitalOceanを使用したドメインの設定の詳細については、ドメインとDNS製品のドキュメントを参照してください。

使用する予備のドメイン名が2つない場合は、今のところプレースホルダー名を使用してください。後で、ローカルコンピューターを構成して構成をテストする方法を説明します。

ステップ1—新しいドキュメントルートディレクトリを設定する

デフォルトでは、Ubuntu16.04のNginxでは1つのサーバーブロックが有効になっています。 次のディレクトリからドキュメントを提供するように構成されています。 /var/www/html.

これは単一のサイトではうまく機能しますが、複数のサイトにサービスを提供する場合は、追加のディレクトリが必要です。 私たちは考えることができます /var/www/html directoryクライアント要求が他のどのサイトとも一致しない場合に提供されるデフォルトのディレクトリ。

内にディレクトリ構造を作成します /var/www 私たちのサイトごとに。 実際のWebコンテンツは html これらのサイト固有のディレクトリ内のディレクトリ。 これにより、サイトに関連付けられた他のディレクトリを兄弟として作成するための追加の柔軟性が得られます。 html 必要に応じてディレクトリ。

サイトごとにこれらのディレクトリを作成する必要があります。 The -p フラグが伝えます mkdir 途中で必要な親ディレクトリを作成するには:

  1. sudo mkdir -p /var/www/example.com/html
  2. sudo mkdir -p /var/www/test.com/html

ディレクトリができたので、Webディレクトリの所有権を通常のユーザーアカウントに再割り当てします。 これにより、 sudo.

注:必要に応じて、フォルダーへの特定のアクセスを許可するために、フォルダーのアクセス許可または所有権を再度調整する必要がある場合があります。 www-data ユーザー。 たとえば、動的サイトではこれが必要になることがよくあります。 特定の権限と所有権の要件は、構成によって完全に異なります。 使用している特定のテクノロジーの推奨事項に従ってください。

使用できます $USER 現在サインインしているアカウントに所有権を割り当てるための環境変数( root としてログインしていないことを確認してください)。 これにより、このディレクトリのコンテンツを簡単に作成または編集できるようになります。

  1. sudo chown -R $USER:$USER /var/www/example.com/html
  2. sudo chown -R $USER:$USER /var/www/test.com/html

変更していない場合は、Webルートの権限はすでに正しいはずです。 umask 値ですが、次のように入力することで確認できます。

  1. sudo chmod -R 755 /var/www

これでディレクトリ構造が構成され、次に進むことができます。

ステップ2—各サイトのサンプルページを作成する

ディレクトリ構造が設定されたので、各サイトのデフォルトページを作成して、何かを表示できるようにします。

作成する index.html 最初のドメインのファイル:

  1. nano /var/www/example.com/html/index.html

ファイル内に、現在アクセスしているサイトを示す非常に基本的なファイルを作成します。 次のようになります。

/var/www/example.com/html/index.html
<html>
    <head>
        <title>Welcome to Example.com!</title>
    </head>
    <body>
        <h1>Success! The example.com server block is working!</h1>
    </body>
</html>

終了したら、ファイルを保存して閉じます。 これを行うには nano、 押す CTRL+o ファイルを書き出すには、 CTRL+x 出る。

2番目のサイトのファイルは基本的に同じになるため、次のように2番目のドキュメントルートにコピーできます。

  1. cp /var/www/example.com/html/index.html /var/www/test.com/html/

これで、エディターで新しいファイルを開くことができます。

  1. nano /var/www/test.com/html/index.html

2番目のドメインを参照するように変更します。

/var/www/test.com/html/index.html
<html>
    <head>
        <title>Welcome to Test.com!</title>
    </head>
    <body>
        <h1>Success!  The test.com server block is working!</h1>
    </body>
</html>

終了したら、このファイルを保存して閉じます。 これで、2つのドメインの訪問者に表示するページがいくつかあります。

ステップ3—ドメインごとにサーバーブロックファイルを作成する

提供したいコンテンツができたので、Nginxにこれを行う方法を指示するサーバーブロックを作成する必要があります。

デフォルトでは、Nginxにはと呼ばれる1つのサーバーブロックが含まれています default これは、独自の構成のテンプレートとして使用できます。 まず、最初のドメインのサーバーブロックを設計し、次に2番目のドメインにコピーして、必要な変更を加えます。

最初のサーバーブロックファイルの作成

上記のように、デフォルトのファイルをコピーして、最初のサーバーブロック構成ファイルを作成します。

  1. sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com

次に、テキストエディタで作成した新しいファイルを次のコマンドで開きます。 sudo 特権:

  1. sudo nano /etc/nginx/sites-available/example.com

コメント行を無視すると、ファイルは次のようになります。

/etc/nginx/sites-available/example.com
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                try_files $uri $uri/ =404;
        }
}

まず、listenディレクティブを確認する必要があります。 default_serverオプションを有効にできるのは、サーバー上のサーバーブロックの1つだけです。これは、次の場合にリクエストを処理するブロックを指定します。 server_name 要求されたものは、使用可能なサーバーブロックのいずれとも一致しません。 訪問者はドメイン名を介してサイトにアクセスするため、これは実際のシナリオではあまり頻繁に発生しないはずです。

を含めることにより、サイトの1つを「デフォルト」として指定することを選択できます。 default_server のオプション listen ディレクティブ、またはデフォルトのサーバーブロックを有効のままにしておくことができます。これにより、 /var/www/html 要求されたホストが見つからない場合はディレクトリ。

このガイドでは、一致しないリクエストを処理するためにデフォルトのサーバーブロックをそのままにしておくため、 default_server これと次のサーバーブロックから。 どのサーバーブロックにも意味のあるオプションを追加することを選択できます。

/etc/nginx/sites-available/example.com
server {
        listen 80;
        listen [::]:80;

        . . .
}

注:次のことを確認できます default_server このオプションは、次のように入力することにより、単一のアクティブなファイルでのみ有効になります。

  1. grep -R default_server /etc/nginx/sites-enabled/

一致するものがコメントされていないファイル(左端の列に表示)以外で見つかった場合、Nginxは無効な構成について文句を言います。

次に調整する必要があるのは、によって指定されたドキュメントルートです。 root 指令。 作成したサイトのドキュメントルートをポイントします。

/etc/nginx/sites-available/example.com
server {
        listen 80;
        listen [::]:80;

        root /var/www/example.com/html;

}

次に、変更する必要があります server_name 最初のドメインのリクエストに一致します。 一致させたいエイリアスを追加することもできます。 追加します www.example.com 示すエイリアス。

終了すると、ファイルは次のようになります。

/etc/nginx/sites-available/example.com
server {
        listen 80;
        listen [::]:80;

        root /var/www/example.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name example.com www.example.com;

        location / {
                try_files $uri $uri/ =404;
        }
}

基本構成に必要なのはこれだけです。 ファイルを保存して閉じ、終了します。

2番目のサーバーブロックファイルの作成

これで初期サーバーブロック構成ができたので、それを2番目のファイルの基礎として使用できます。 それをコピーして、新しいファイルを作成します。

  1. sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/test.com

で新しいファイルを開きます sudo エディターでの特権:

  1. sudo nano /etc/nginx/sites-available/test.com

繰り返しますが、使用しないように注意してください default_server のオプション listen すでに他の場所で使用している場合は、このファイルのディレクティブ。 調整する root 2番目のドメインのドキュメントルートをポイントし、 server_name 2番目のサイトのドメイン名と一致するようにします(エイリアスを含めるようにしてください)。

終了すると、ファイルは次のようになります。

/etc/nginx/sites-available/test.com
server {
        listen 80;
        listen [::]:80;

        root /var/www/test.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name test.com www.test.com;

        location / {
                try_files $uri $uri/ =404;
        }
}

終了したら、ファイルを保存して閉じます。

ステップ4—サーバーブロックを有効にしてNginxを再起動する

サーバーブロックファイルができたので、それらを有効にする必要があります。 これらのファイルから sites-enabled Nginxが起動時に読み取るディレクトリ。

次のように入力して、これらのリンクを作成できます。

  1. sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
  2. sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/

これらのファイルは、有効なディレクトリにリンクされています。 これで、3つのサーバーブロックが有効になり、それらに基づいて応答するように構成されました。 listen ディレクティブと server_name (Nginxがこれらのディレクティブを処理する方法の詳細についてはここを参照してください):

  • example.com:のリクエストに対応します example.comwww.example.com
  • test.com:のリクエストに対応します test.comwww.test.com
  • default:他の2つのブロックと一致しないポート80の要求に応答します。

サーバー名を追加することで発生する可能性のあるハッシュバケットメモリの問題を回避するために、 /etc/nginx/nginx.conf ファイル。 今すぐファイルを開きます。

  1. sudo nano /etc/nginx/nginx.conf

ファイル内で、 server_names_hash_bucket_size 指令。 を削除します # 行のコメントを解除する記号:

/etc/nginx/nginx.conf
http {
    . . .

    server_names_hash_bucket_size 64;

    . . .
}

終了したら、ファイルを保存して閉じます。

次に、テストして、Nginxファイルのいずれにも構文エラーがないことを確認します。

  1. sudo nginx -t

問題が見つからなかった場合は、Nginxを再起動して変更を有効にします。

  1. sudo systemctl restart nginx

これで、Nginxは両方のドメイン名を提供するはずです。

ステップ5—テスト用にローカルホストファイルを変更する(オプション)

所有しているドメイン名を使用しておらず、代わりにプレースホルダー値を使用している場合は、ローカルコンピューターの構成を変更して、Nginxサーバーブロック構成を一時的にテストできるようにすることができます。

これにより、他の訪問者がサイトを正しく表示することはできなくなりますが、各サイトに個別にアクセスして構成をテストすることができます。 これは、ドメイン名を解決するために通常DNSに送信される要求をインターセプトすることによって機能します。 代わりに、ドメイン名を要求するときにローカルコンピューターがアクセスするIPアドレスを設定できます。

注:これらの手順では、リモートサーバーではなく、ローカルコンピューターで操作していることを確認してください。 これを行うには、ルートアクセス権を持っているか、管理グループのメンバーであるか、システムファイルを編集できる必要があります。

自宅でMacまたはLinuxコンピュータを使用している場合は、次のように入力して必要なファイルを編集できます。

  1. sudo nano /etc/hosts

Windowsを使用している場合は、ここでhostsファイルを変更する手順を見つけることができます。

サーバーのパブリックIPアドレスとサーバーにルーティングするドメインを知っている必要があります。 私のサーバーのパブリックIPアドレスが 203.0.113.5、ファイルに追加する行は次のようになります。

/ etc / hosts
127.0.0.1   localhost
. . .

203.0.113.5 example.com www.example.com
203.0.113.5 test.com www.test.com

これにより、 example.comtest.com そして、それらをサーバーに送信します。これは、使用しているドメインを実際に所有していない場合に必要なものです。

終了したら、ファイルを保存して閉じます。

ステップ6—結果をテストする

これですべての設定が完了したので、サーバーブロックが正しく機能していることをテストする必要があります。 Webブラウザのドメインにアクセスしてこれを行うことができます。

http://example.com

次のようなページが表示されます。

2番目のドメイン名にアクセスすると、わずかに異なるサイトが表示されます。

http://test.com

これらのサイトの両方が機能する場合は、Nginxを使用して2つの独立したサーバーブロックを正常に構成しています。

この時点で、 hosts テストするためにローカルコンピュータ上のファイルを作成する場合は、追加した行を削除することをお勧めします。

公開サイトのサーバーへのドメイン名アクセスが必要な場合は、各サイトのドメイン名を購入することをお勧めします。

結論

これで、同じサーバーからホストするドメインごとにサーバーブロックを作成できるようになります。 ハードウェアがトラフィックを処理できる限り、作成できるサーバーブロックの数に実際の制限はありません。