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

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

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

前提条件

  • NGINX がインストールされている
  • クライアントおよび Web サーバーは、example.com および example.net ドメインを Web サーバーの IP アドレスに解決します。

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

手順

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

    1. デフォルトでは、/etc/nginx/nginx.conf ファイルには catch-all 設定がすでに含まれています。設定からこの部分を削除した場合は、以下の server ブロックを /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 ファイルからのサンプルコンテンツを表示します。