序章
Nginx Webサーバーを使用する場合、server blocks
(Apacheの仮想ホストと同様)を使用して、構成の詳細をカプセル化し、単一のサーバーから複数のドメインをホストできます。
このガイドでは、Ubuntu14.04サーバー上のNginxでサーバーブロックを構成する方法について説明します。
前提条件
このチュートリアルでは、sudo
権限を持つroot以外のユーザーを使用します。 このようなユーザーが構成されていない場合は、 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.com
とtest.com
です。
DigitalOceanでドメイン名を設定する方法に関するガイドはこちらにあります。 使用する予備のドメイン名が2つない場合は、今のところダミー名を使用してください。後で、ローカルコンピューターを構成して構成をテストする方法を説明します。
ステップ1—新しいドキュメントルートディレクトリを設定する
デフォルトでは、Ubuntu14.04のNginxではデフォルトで1つのサーバーブロックが有効になっています。 次のディレクトリからドキュメントを提供するように構成されています。
/usr/share/nginx/html
/var/www
ディレクトリにあるものを操作する方が簡単なので、デフォルトは使用しません。 UbuntuのNginxパッケージは、/ var / wwwを利用するパッケージに関するDebianポリシーのため、デフォルトではドキュメントルートとして/var/www
を使用しません。
私たちはユーザーであり、パッケージメンテナではないので、これがドキュメントのルートになりたい場所であることをNginxに伝えることができます。 具体的には、/var/www
ディレクトリ内に各サイトのディレクトリが必要であり、これらの下にhtml
という実際のファイルを保持するディレクトリがあります。
まず、必要なディレクトリを作成する必要があります。 これは、次のコマンドで実行できます。 -p
フラグは、mkdir
に、途中で必要な親ディレクトリを作成するように指示します。
- sudo mkdir -p /var/www/example.com/html
- sudo mkdir -p /var/www/test.com/html
ディレクトリが作成されたので、所有権を通常のユーザーに譲渡する必要があります。 $USER
環境変数を使用して、現在サインインしているユーザーアカウントを置き換えることができます。 これにより、訪問者がコンテンツを作成することなく、このディレクトリにファイルを作成できるようになります。
- sudo chown -R $USER:$USER /var/www/example.com/html
- sudo chown -R $USER:$USER /var/www/test.com/html
umask
の値を変更していない場合は、Webルートの権限はすでに正しいはずですが、次のように入力することで確認できます。
- sudo chmod -R 755 /var/www
これでディレクトリ構造が構成され、次に進むことができます。
ステップ2—各サイトのサンプルページを作成する
ディレクトリ構造が設定されたので、各サイトのデフォルトページを作成して、何かを表示できるようにします。
最初のドメインにindex.html
ファイルを作成します。
- 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番目のドキュメントルートにコピーできます。
- cp /var/www/example.com/html/index.html /var/www/test.com/html/
これで、エディターで新しいファイルを開き、2番目のドメインを参照するように変更できます。
- 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にはdefault
という1つのサーバーブロックが含まれており、これを独自の構成のテンプレートとして使用できます。 まず、最初のドメインのサーバーブロックを設計し、次に2番目のドメインにコピーして、必要な変更を加えます。
最初のサーバーブロックファイルを作成する
上記のように、デフォルトのファイルをコピーして、最初のサーバーブロック構成ファイルを作成します。
- sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com
次に、root権限でテキストエディタで作成した新しいファイルを開きます。
- 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ディレクティブを確認する必要があります。 default_server
仕様を持つことができるサーバーブロックは1つだけです。 これは、要求された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番目のファイルの基礎として使用できます。 それをコピーして、新しいファイルを作成します。
- sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/test.com
エディターでroot権限で新しいファイルを開きます。
- 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が起動時に読み取ります。
次のように入力して、これらのリンクを作成できます。
- sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
- sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/
これらのファイルは、有効なディレクトリにあります。 ただし、テンプレートとして使用したデフォルトのサーバーブロックファイルも現在有効になっており、default_server
パラメーターが設定されているファイルと競合します。
シンボリックリンクを削除するだけで、デフォルトのサーバーブロックファイルを無効にできます。 sites-available
ディレクトリで引き続き参照できますが、起動時にNginxによって読み取られることはありません。
- sudo rm /etc/nginx/sites-enabled/default
また、デフォルトのNginx構成ファイルで1つの設定をすばやく調整する必要があります。 次のように入力して開きます。
- sudo nano /etc/nginx/nginx.conf
1行のコメントを外す必要があります。 これからコメントを見つけて削除します:
server_names_hash_bucket_size 64;
これで、Nginxを再起動して変更を有効にする準備が整いました。 次のように入力すると、次のように入力できます。
- sudo service nginx restart
これで、Nginxは両方のドメイン名を提供するはずです。
ステップ5—ローカルホストファイルを設定する(オプション)
所有しているドメイン名を使用しておらず、代わりにダミー値を使用している場合は、ローカルコンピューターの構成を変更して、Nginxサーバーのブロック構成を一時的にテストできるようにすることができます。
これにより、他の訪問者がサイトを正しく表示することはできなくなりますが、各サイトに個別にアクセスして構成をテストすることができます。 これは基本的に、ドメイン名を解決するために通常DNSに送信される要求をインターセプトすることによって機能します。 代わりに、ドメイン名を要求するときにローカルコンピューターがアクセスするIPアドレスを設定できます。
これらの手順では、VPSサーバーではなく、ローカルコンピューターで操作していることを確認してください。 これを行うには、rootアクセス権を持っているか、管理グループのメンバーであるか、システムファイルを編集できる必要があります。
自宅でMacまたはLinuxコンピュータを使用している場合は、次のように入力して必要なファイルを編集できます。
- 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.com
およびtest.com
のリクエストがインターセプトされ、サーバーに送信されます。これは、使用しているドメインを実際に所有していない場合に必要なものです。
終了したら、ファイルを保存して閉じます。
ステップ6—結果をテストする
これですべての設定が完了したので、サーバーブロックが正しく機能していることをテストする必要があります。 Webブラウザのドメインにアクセスしてこれを行うことができます。
http://example.com
次のようなページが表示されます。
2番目のドメイン名にアクセスすると、わずかに異なるサイトが表示されます。
http://test.com
これらのサイトの両方が機能する場合は、Nginxを使用して2つの独立したサーバーブロックを正常に構成しています。
この時点で、テストのためにローカルコンピューターでhosts
ファイルを調整した場合は、追加した行を削除することをお勧めします。
公開サイトのサーバーへのドメイン名アクセスが必要な場合は、各サイトのドメイン名を購入することをお勧めします。 ここで、サーバーを指すように設定する方法を学ぶことができます。
結論
これで、同じサーバーからホストするドメインごとにサーバーブロックを作成できるようになります。 ハードウェアがトラフィックを処理できる限り、作成できるサーバーブロックの数に実際の制限はありません。