序章

Nginx Webサーバーを使用する場合、 server blocks (Apacheの仮想ホストと同様に)構成の詳細をカプセル化し、単一のサーバーから複数のドメインをホストするために使用できます。

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

前提条件

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

また、サーバーにNginxをインストールする必要があります。 サーバー上にLEMPスタック全体(Linux、Nginx、MySQL、およびPHP)が必要な場合は、 Ubuntu14.04でのLEMPスタックのセットアップに関するガイドに従ってください。 Nginxのみが必要な場合は、次のように入力してインストールできます。

sudo apt-get update
sudo apt-get install nginx

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

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

DigitalOceanでドメイン名を設定する方法に関するガイドはこちらにあります。 使用する予備のドメイン名が2つない場合は、今のところダミー名を使用してください。後で、ローカルコンピューターを構成して構成をテストする方法を説明します。

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

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

/usr/share/nginx/html

デフォルトを使用しないのは、 /var/www ディレクトリ。 UbuntuのNginxパッケージは使用しません /var/www / var / wwwを利用するパッケージに関するDebianポリシーにより、デフォルトでドキュメントルートとして使用されます。

私たちはユーザーであり、パッケージメンテナではないので、これがドキュメントのルートになりたい場所であることをNginxに伝えることができます。 具体的には、内の各サイトのディレクトリが必要です。 /var/www ディレクトリと私たちはこれらの下に呼ばれるディレクトリがあります html 実際のファイルを保持します。

まず、必要なディレクトリを作成する必要があります。 これは、次のコマンドで実行できます。 The -p フラグが伝えます mkdir 途中で必要な親ディレクトリを作成するには:

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

ディレクトリが作成されたので、所有権を通常のユーザーに譲渡する必要があります。 使用できます $USER 現在サインインしているユーザーアカウントを置き換える環境変数。 これにより、訪問者がコンテンツを作成できるようにすることなく、このディレクトリにファイルを作成できるようになります。

  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

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

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

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

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

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

これで、エディターで新しいファイルを開き、2番目のドメインを参照するように変更できます。

  1. nano /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

次に、テキストエディタで作成した新しいファイルをroot権限で開きます。

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

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

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name localhost;

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

まず、listenディレクティブを確認する必要があります。 サーバーブロックの1つだけが持つことができます default_server 仕様。 これは、次の場合にリクエストをサーバーするブロックを指定します server_name 要求されたものは、使用可能なサーバーブロックのいずれとも一致しません。

最終的にデフォルトのサーバーブロック構成を無効にするので、 default_server このサーバーブロックまたは他のサイトのサーバーブロックのいずれかのオプション。 私は去るつもりです default_server このサーバーブロックでオプションが有効になっていますが、状況に最適なものを選択できます。

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

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

:各Nginxステートメントはセミコロン(;)で終わる必要があるため、問題が発生した場合は各行を確認してください。

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

server_name example.com www.example.com;

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

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

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

    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

エディターでroot権限で新しいファイルを開きます。

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

この新しいファイルでは、 listen 再びディレクティブ。 あなたが去った場合 default_server 最後のファイルでオプションが有効になっている場合は、このファイルから削除する必要があります。 さらに、あなたは取り除く必要があります ipv6only=on オプション。アドレスとポートの組み合わせごとに1回しか指定できないため、次のようになります。

listen 80;
listen [::]:80;

2番目のドメインのドキュメントルートを指すようにドキュメントルートディレクティブを調整します。

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

調整する server_name 2番目のドメインとエイリアスを一致させるには:

server_name test.com www.test.com;

次の変更を加えると、ファイルは次のようになります。

server {
    listen 80;
    listen [::]:80;

    root /var/www/test.com/html;
    index index.html index.htm;

    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/

これらのファイルは、有効なディレクトリにあります。 ただし、テンプレートとして使用したデフォルトのサーバーブロックファイルも現在有効になっており、 default_server パラメータセット。

シンボリックリンクを削除するだけで、デフォルトのサーバーブロックファイルを無効にできます。 それはまだ参照のために利用可能です sites-available ディレクトリですが、起動時にNginxによって読み取られません:

  1. sudo rm /etc/nginx/sites-enabled/default

また、デフォルトのNginx構成ファイルで1つの設定をすばやく調整する必要があります。 次のように入力して開きます。

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

1行のコメントを外す必要があります。 これからコメントを見つけて削除します:

server_names_hash_bucket_size 64;

これで、Nginxを再起動して変更を有効にする準備が整いました。 次のように入力すると、次のように入力できます。

  1. sudo service nginx restart

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

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

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

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

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

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

  1. sudo nano /etc/hosts

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

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

127.0.0.1   localhost
127.0.0.1   guest-desktop
111.111.111.111 example.com
111.111.111.111 test.com

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

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

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

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

http://example.com

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

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

http://test.com

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

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

公開サイトのサーバーへのドメイン名アクセスが必要な場合は、各サイトのドメイン名を購入することをお勧めします。 ここで、サーバーを指すように設定する方法を学ぶことができます。

結論

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