2.2. 異なるドメインに異なるコンテンツを提供する Web サーバーとしての NGINX の設定

デフォルトでは、NGINX はサーバーの IP アドレスに関連付けられたすべてのドメイン名のクライアントに同じコンテンツを提供する Web サーバーとして動作します。この手順では、NGINX を設定する方法を説明します。

  • /var/www/example.com/ ディレクトリーのコンテンツで、example.com ドメインにリクエストを提供する。
  • /var/www/example.net/ ディレクトリーのコンテンツを使用して、example.net ドメインにリクエストを提供する。
  • その他のすべてのリクエスト (たとえば、サーバーの IP アドレスまたはサーバーの IP アドレスに関連付けられたその他のドメイン) に /usr/share/nginx/html/ ディレクトリーのコンテンツを指定します。

前提条件

  • NGINX は、「NGINX のインストールおよび準備」の説明に従ってインストールされます。
  • クライアントおよび Web サーバーは、example.com および example.net ドメインを Web サーバーの IP アドレスに解決します。

    これらのエントリーは DNS サーバーに手動で追加する必要がある点に注意してください。

手順

  1. /etc/nginx/nginx.conf ファイルを編集します。

    1. デフォルトでは、/etc/nginx/nginx.conf ファイルには catch-all 設定がすでに含まれています。設定からこの部分を削除した場合は、以下の サーバー ブロックを /etc/nginx/nginx.conf ファイルの http ブロックに再追加します。

      server {
          listen       80 default_server;
          listen       [::]:80 default_server;
          server_name  _;
          root         /usr/share/nginx/html;
      }

      これらの設定は以下を構成します。

      • listen パラメーターは、サービスがリッスンする IP アドレスとポートを定義します。この場合、NGINX は IPv4 と IPv6 の両方のアドレスのポート 80 でリッスンします。default_server は、NGINX がこの server ブロックを IP アドレスとポートに一致するリクエストのデフォルトとして使用していることを示します。
      • server_name パラメーターは、この server ブロックに対応するホスト名を定義します。server_name_ に設定すると、この server ブロックのホスト名を受け入れるように NGINX を設定します。
      • root パラメーターは、この server ブロックの Web コンテンツへのパスを設定します。
    2. example.com ドメインの同様の server ブロックを http ブロックに追加します。

      server {
          server_name  example.com;
          root         /var/www/example.com/;
          access_log   /var/log/nginx/example.com/access.log;
          error_log    /var/log/nginx/example.com/error.log;
      }
      • access_log パラメーターは、このドメインに別のアクセスログファイルを定義します。
      • error_log パラメーターは、このドメインに別のエラーログファイルを定義します。
    3. example.net ドメインの同様の server ブロックを http ブロックに追加します。

      server {
          server_name  example.net;
          root         /var/www/example.net/;
          access_log   /var/log/nginx/example.net/access.log;
          error_log    /var/log/nginx/example.net/error.log;
      }
  2. 両方のドメインのルートディレクトリーを作成します。

    # mkdir -p /var/www/example.com/
    # mkdir -p /var/www/example.net/
  3. 両方のルートディレクトリーに httpd_sys_content_t コンテキストを設定します。

    # semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com(/.*)?"
    # restorecon -Rv /var/www/example.com/
    # semanage fcontext -a -t httpd_sys_content_t "/var/www/example.net(/.\*)?"
    # restorecon -Rv /var/www/example.net/

    これらのコマンドは、/var/www/example.com/ ディレクトリーおよび /var/www/example.net/ ディレクトリーに httpd_sys_content_t コンテキストを設定します。

    policycoreutils-python-utils パッケージをインストールして restorecon コマンドを実行する必要があります。

  4. 両方のドメインのログディレクトリーを作成します。

    # mkdir /var/log/nginx/example.com/
    # mkdir /var/log/nginx/example.net/
  5. nginx サービスを再起動します。

    # systemctl restart nginx

検証手順

  1. 各仮想ホストのドキュメントルートに異なるサンプルファイルを作成します。

    # echo "Content for example.com" > /var/www/example.com/index.html
    # echo "Content for example.net" > /var/www/example.net/index.html
    # echo "Catch All content" > /usr/share/nginx/html/index.html
  2. ブラウザーを使用して http://example.com に接続します。Web サーバーは、/var/www/example.com/index.html ファイルからのサンプルコンテンツを表示します。
  3. ブラウザーを使用して http://example.net に接続します。Web サーバーは、/var/www/example.net/index.html ファイルからのサンプルコンテンツを表示します。
  4. ブラウザーを使用して http://IP_address_of_the_server に接続します。Web サーバーは、/usr/share/nginx/html/index.html ファイルからのサンプルコンテンツを表示します。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。