Rocky Linux 9でNginxのサーバーブロック(バーチャルホスト)を設定する方法

はじめに

Nginxウェブサーバーを使用する際には、サーバーブロック(Apacheの仮想ホストに似たもの)を使用して、構成詳細をカプセル化し、1つのサーバーで複数のドメインをホストすることができます。

このガイドでは、Rocky Linux 9 サーバー上の Nginx でサーバーブロックを設定する方法について学びます。

前提条件

このチュートリアルでは、非ルートユーザーを使用し、sudo特権を持つようにしてください。設定されていない場合は、Rocky Linux 9の初期サーバーセットアップガイドに従って新しいユーザーを作成することができます。

あなたのサーバーにはNginxもインストールする必要があります。Rocky Linux 9にNginxをインストールする方法に従ってインストールできます。

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

デモのために、このチュートリアルではNginxサーバーを使用して2つのドメインを設定する方法をカバーします。このガイドで使用するドメイン名は example.com と test.com ですが、既に自分自身のドメインがある場合は、それらを使用することもできます。

Note

注意:Silicon Cloudで新しいドメインの登録に関する詳細は、弊社のドメインとDNSのプロダクトドキュメンテーションをご覧ください。

もし2つのドメイン名を設定する必要がない場合は、今のところプレースホルダー名を使用することができます。それでも設定をテストすることができます。

デフォルトでは、Rocky Linux 9のNginxには1つのサーバーブロックが有効になっています。このブロックは、/usr/share/nginx/htmlディレクトリ内のドキュメントを提供するように構成されています。この設定は、1つのサイトには適していますが、複数のサイトを提供するためには追加のディレクトリが必要です。クライアントのリクエストが他のサイトと一致しない場合、/usr/share/nginx/htmlディレクトリがデフォルトのディレクトリとして提供されると考えることができます。

各サイトに対して、/usr/share/nginx内にディレクトリ構造を作成することができます。実際のウェブコンテンツは、これらのサイト固有のディレクトリ内のhtmlディレクトリに配置されます。これにより、必要に応じてサイトに関連する他のディレクトリを作成する柔軟性が得られます。

各サイトごとにこれらのディレクトリを作成してください。-pフラグはmkdirに対して必要な親ディレクトリを作成するよう指示します。

  1. sudo mkdir -p /usr/share/nginx/example.com/html
  2. sudo mkdir -p /usr/share/nginx/test.com/html

 

ディレクトリーができたら、ウェブディレクトリーの所有権を通常のユーザーアカウントに再割り当てできます。これによって、sudo 権限なしで書き込むことができます。

現在ログインしているアカウントに所有権を割り当てるために、$USER環境変数を使用することができます(rootとしてログインしていないことを確認してください)。これらのディレクトリのグループ権限をNginxに割り当てる必要があります。NginxはRocky Linux上で自動的に作成されるアカウントであり、Webアプリケーションが必要な場合にウェブサーバー自体が新しいファイルを作成できるようにします。chownコマンドを使用すると、両方の操作を一度に行うことができます。

  1. sudo chown -R $USER:nginx /usr/share/nginx/example.com/html
  2. sudo chown -R $USER:nginx /usr/share/nginx/test.com/html

 

最後に、chmodコマンドを使用して、ユーザーとnginxグループの両方が完全な(7)権限を持ち、他のユーザーには読み取り専用(5)権限があることを確認してください。Linuxの権限について詳しくは、Linux権限の基礎を参照してください。

  1. sudo chmod -R 775 /usr/share/nginx

 

ディレクトリ構造は今設定されており、次に進むことができます。

ステップ2-それぞれのサイトにサンプルページを作成する

ディレクトリ構造が整ったら、各サイトのデフォルトページを作成して、表示する内容があるようにしてください。

Nanoまたはお気に入りのテキストエディタを使用して、最初のドメインにindex.htmlファイルを作成してください。

  1. nano /usr/share/nginx/example.com/html/index.html

 

ファイル内には、現在アクセスしているサイトを示すベアボーンのウェブランディングページを作成してください。以下のような外見になります。

以下の英文を日本語で書き換えてください(一つのオプションのみ):
/usr/share/nginx/example.com/html/index.html「/usr/share/nginx/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+Xを押し、指示が表示されたらYを押して、その後にEnterを押してください。

第二のサイトのファイルはデモンストレーション用に同じになる予定なので、次のようにしてそれを第二のドキュメントルートにコピーすることができます。

  1. cp /usr/share/nginx/example.com/html/index.html /usr/share/nginx/test.com/html/

 

今、新しいファイルをnanoまたはお気に入りのテキストエディタで開くことができます。

  1. nano /usr/share/nginx/test.com/html/index.html

 

あなたの2番目のドメインに言及するようにそれを修正してください。

以下の文を日本語で自然な言い回しで言い換えてください(1つのオプションで結構です):
/usr/share/nginx/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にこれをどのように行うかを伝えるサーバーブロックを作成する必要があります。

デフォルトでは、Rocky Linux上のNginxには、そのメインの設定ファイルであるnginx.conf内に1つの「デフォルト」サーバーブロックが含まれています。そのファイル内のそのブロックは、以下のようになります。

/etc/nginx/nginx.conf を日本語で言い換えると、以下のようになります:
「/etc/nginx/nginx.conf」
…
   server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
…

あなたは、独自の設定を別のファイルで作成することができるため、これを自身の構成テンプレートとして使用することができます。最初のドメインのサーバーブロックを設計し、それを二番目のドメインにコピーして必要な変更を加えることで始めましょう。

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

/etc/nginx/conf.dディレクトリ内に最初のサーバーブロック設定ファイルを作成してください。メインのNginx設定ファイルにはデフォルトでinclude /etc/nginx/conf.d/*.conf;という行が含まれているため、追加のサーバーブロックを持つファイルはそのパターンに一致するファイルを確認します。

お気に入りのテキストエディタをsudo権限で使用して、最初のドメインの設定ファイルを作成してください。

  1. sudo nano /etc/nginx/conf.d/example.com.conf

 

以下のベアボーンなサーバーブロックを貼り付けて始めてください。

/example.com.confのパスは、「/etc/nginx/conf.d/example.com.conf」となります。
server {
        listen 80;
        listen [::]:80;

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

        server_name _;

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

まず、リスンディレクティブを見直す必要があります。サーバー内のサーバーブロックの中で、default_serverオプションが有効になっているのは1つだけです。このオプションは、サーバーブロックのいずれにも一致しない場合にどのブロックがリクエストを処理するかを指定します。実際の世界のシナリオでは、訪問者はドメイン名を介してサイトにアクセスするため、これはあまり頻繁に起こることではありません。

listenディレクティブにdefault_serverオプションを含めることで、サイトの中から「デフォルト」を指定することができます。または、nginx.confでデフォルトのサーバーブロックを有効にしたままにしておくこともできます。その場合、リクエストされたホストが見つからなかった場合には、/usr/share/nginx/htmlディレクトリの内容が提供されます。

このガイドでは、「デフォルト」サーバーブロックをそのままにして、一致しないリクエストを処理するようにします。そのため、新しいexample.comの設定にはdefault_serverは含まれません。

「/etc/nginx/conf.d/example.com.conf」を日本語で言い換えてください。1つのオプションだけで結構です。

「/etc/nginx/conf.d/example.com.conf」

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

        . . .
}

次に調整する項目は、rootディレクティブで指定されるドキュメントルートです。作成したサイトのドキュメントルートにポイントしてください。

以下の内容を日本語で自然な表現に言い換えてください。1つのオプションで構いません:
/etc/nginx/conf.d/example.com.conf
server {
        listen 80;
        listen [::]:80;

        root /usr/share/nginx/example.com/html;

}

次に、最初のドメインのリクエストに一致するようにserver_nameを変更する必要があります。必要に応じて、一致させるためのエイリアスを追加することもできます。このチュートリアルでは、例としてexample.comとwww.example.comのエイリアスを追加します。

あなたが終わった時には、あなたのファイルはこのようになります。

「/etc/nginx/conf.d/example.com.conf」
server {
        listen 80;
        listen [::]:80;

        root /usr/share/nginx/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番目のファイルを作成できます。新しいファイルを作るためにそれをコピーしてください。

  1. sudo cp /etc/nginx/conf.d/example.com.conf /etc/nginx/conf.d/test.com.conf

 

sudo権限を持ってお気に入りのエディタで新しいファイルを開いてください。

  1. sudo nano /etc/nginx/conf.d/test.com.conf

 

もうどこかでdefault_serverオプションを使用した場合、このファイルのlistenディレクティブには使用しないようにしてください。rootディレクティブを調整して、2番目のドメインのドキュメントルートを指すようにし、server_nameを2番目のサイトのドメイン名に合わせて調整してください(エイリアスも含めることを忘れずに)。

作業が終わった後、おそらくあなたのファイルはこのようになるでしょう。

「/etc/nginx/conf.d/test.com.conf」というファイル
server {
        listen 80;
        listen [::]:80;

        root /usr/share/nginx/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;
        }
}

ファイルを保存して閉じてください。次のステップでは、変更を反映するためにNginxを再読み込みします。

ステップ4 – サーバーブロックの有効化とNginxの再起動

お客様は現在、3つのサーバーブロックが有効になっており、それぞれのリスンディレクティブとサーバー名に基づいて応答するように設定されています(Nginxがこれらのディレクティブを処理する方法の詳細についてはこちらをご覧ください)。

  • example.com: Will respond to requests for example.com and www.example.com
  • test.com: Will respond to requests for test.com and www.test.com
  • default: Will respond to any requests on port 80 that do not match the other two blocks.

作業が終わったらファイルを保存し、閉じてください。次に、Nginxファイルのいずれにも構文エラーがないことをテストしてください。

  1. sudo nginx -t

 

問題が見つからなかった場合、変更を有効にするためにNginxを再起動してください。

  1. sudo systemctl restart nginx

 

現在、Nginxはあなたの両方のドメイン名を提供しています。 (Gennzai, Nginx wa anata no ryōhou no dōmein-mei o teikyō shiteimasu.)

ステップ5 – テストのためにローカルホストファイルを編集する(オプション)

もし、所有しているドメイン名を使っておらず、実際にこのサーバのIPアドレスを指す代替値を使用している場合、ローカルコンピュータのホストファイルを変更することで、一時的にNginxのサーバブロックの設定をテストすることができます。

他の訪問者が正しくサイトを表示することはできませんが、個別に各サイトにアクセスし、設定をテストすることができます。これは、通常はDNSに送信されるリクエストを傍受し、ドメイン名を解決する代わりに、ホストファイルを設定して特定のドメインを特定のリモートアドレスに自動的にハードコードすることで機能します。

Note

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

MacやLinuxの環境で作業をしている場合、ホストファイルは/etc/hostsに位置しています。

  1. sudo nano /etc/hosts

 

Windowsを使用している場合、ホストファイルはC:\Windows\System32\drivers\etc\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.comとtest.comへのすべてのリクエストをインターセプトし、サーバーに送信します。これは、実際に所有していないドメインをテストする場合に必要となるものです。

終わったら、ファイルを保存して閉じてください。

ステップ6:結果のテスト

設定が完了したので、サーバーブロックが正常に機能しているかテストしてみるべきです。そのために、ウェブブラウザでドメインを訪れることでテストできます。

http://example.com

これに似たページが表示されるはずです。

Nginx first server block

もしもあなたが自分の第2のドメイン名を訪れるならば、少し違ったサイトが見えるはずです。

http://test.com
Nginx second server block

もし、これらのサイトの両方が動作するなら、あなたはNginxで2つの独立したサーバーブロックを正常に設定しました。

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

もしパブリックサイトへのサーバーへのドメイン名アクセスが必要な場合は、おそらく各サイトに対してドメイン名を購入したいでしょう。

結論

同じサーバーからホストしたい各ドメインに対して、サーバーブロックを作成できる能力を持っているはずです。トラフィックを処理できるハードウェアがある限り、作成できるサーバーブロックの数には実質的な制限はありません。

次に、Nginxでパスワード認証の設定方法を学ぶことをお勧めします。

コメントを残す 0

Your email address will not be published. Required fields are marked *