リクエストを振り分けるサーバー名の設定(server_nameディレクティブ)

広告

Nginx の server_name ディレクティブには、どの仮想サーバ(server コンテキスト)がリクエストを処理するのかを決定するための「サーバー名」を指定します。ここでいうサーバー名とは、一般的にドメイン名のことを指し、クライアントから送られてくる HTTP リクエスト内の Host ヘッダーフィールド の値と照合されます。ここでは Nginx の server_name ディレクティブの使い方について解説します。

server_nameディレクティブの書式

Nginx の server_name ディレクティブには、どの仮想サーバがリクエストを処理するかを決定するためのサーバー名(ドメイン名)を設定します。server_name ディレクティブの書式は次の通りです。

Syntax:   server_name name ...;
Default:  server_name "";
Context:  server

server_name ディレクティブは server コンテキストに記述します。値として仮想サーバがリクエストを受け付けるサーバー名(ドメイン名)を指定します。

クライアントから届く HTTP リクエストには Host ヘッダーフィールド があり、「どのドメイン名(およびポート番号)に対してアクセスしたか」という情報が記述されています。

Host: www.example.com
Host: www.example.com:80

この Host ヘッダー内のドメイン名部分と server_name ディレクティブの値を照合して、使用する仮想サーバを決定します。

サーバ―名を複数指定する場合は、半角スペースで区切って記述して下さい。

server_name name1 name2 name3;

サーバー名には、ドメイン名やホスト名を指定します。ワイルドカードや正規表現を使った指定することもできます。

server_nameディレクティブの設定例

server_name ディレクティブの設定例をいくつか見ていきます。

server {
  server_name example.com;
}

リクエストのドメイン名が "example.com" の場合に仮想サーバが選択されます。

server {
  server_name example.com www.example.com;
}

リクエストのドメイン名が "example.com" または "www.example.com" の場合に仮想サーバが選択されます。

server {
  server_name *.example.com;
}

サーバー名にはワイルドカード(*)を使用することができます。リクエストのドメイン名が "example.com" のサブドメイン("host.example.com" や "www.example.com" など)の場合に仮想サーバが選択されます。

server {
  server_name ~^www\d+\.example\.com$;
}

サーバー名には正規表現も使用することができます。リクエストのドメイン名が正規表現で表される値の場合("www1.example.com" や "www2.example.com" など)に仮想サーバが選択されます。

server {
  server_name 192.168.0.1;
}

ブラウザで http://192.168.0.1/ のように IP アドレスを直打ちでアクセスした場合に仮想サーバが選択されます。(このようなリクエストの場合、 Host ヘッダーフィールドは Host: 192.168.0.1 のようになります)。

server {
  server_name _;
}

_ は特別な意味を持つわけではなく、任意の名前として使用されています。通常は default_server と組み合わせて、どのサーバー名にも一致しなかった場合に使用される仮想サーバとして選択されます。

server {
	listen 80 default_server;
  server_name _;
}

※ デフォルトサーバについて詳しくは「リクエストを待ち受けるIPアドレスとポートの設定(listenディレクティブ)」を参照されてください。

複数のサーバー名と一致する場合の優先順位

サーバー名にワイルドカードや正規表現を使用している場合、リクエストのドメイン名が複数の仮想サーバの名前に一致することがあります。このときは、次の優先順位に従って仮想サーバが選択されます。

1. 完全一致
2. ワイルドカード(前方一致 *.example.com など)
3. ワイルドカード(後方一致 example.* など)
4. 正規表現

server_name ディレクティブでは、記述されている順番ではなく、この優先順位によって仮想サーバが選択される点に注意してください。

-- --

Nginx の server_name ディレクティブの使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。