- Home ›
- Nginx入門 ›
- Nginxのディレクティブ
リクエストを振り分けるサーバー名の設定(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 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。