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
ファイルからのサンプルコンテンツを表示します。