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 サーバーに手動で追加する必要がある点に注意してください。
手順
/etc/nginx/nginx.confファイルを編集します。デフォルトでは、
/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 コンテンツへのパスを設定します。
-
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ディレクティブは、このドメインに別のエラーログファイルを定義します。
-
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; }
両方のドメインのルートディレクトリーを作成します。
# mkdir -p /var/www/example.com/ # mkdir -p /var/www/example.net/両方のルートディレクトリーに
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コマンドを実行する必要があります。両方のドメインのログディレクトリーを作成します。
# mkdir /var/log/nginx/example.com/ # mkdir /var/log/nginx/example.net/nginxサービスを再起動します。# systemctl restart nginx
検証
仮想ホストのドキュメントルートごとに異なるサンプルファイルを作成します。
# 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-
ブラウザーを使用して
http://example.comに接続します。Web サーバーは、/var/www/example.com/index.htmlファイルからのサンプルコンテンツを表示します。 -
ブラウザーを使用して
http://example.netに接続します。Web サーバーは、/var/www/example.net/index.htmlファイルからのサンプルコンテンツを表示します。 -
ブラウザーを使用して
http://IP_address_of_the_serverに接続します。Web サーバーは、/usr/share/nginx/html/index.htmlファイルからのサンプルコンテンツを表示します。