サーバ名 | english русский 简体中文 עברית 日本語 türkçe ニュース [en] nginx について ダウンロード [en] セキュリティ情報 [en] ドキュメント faq リンク [en] 本 [en] サポート [en] trac wiki nginx.com | |||||||
This translation may be out of date. Check the English version for recent changes.
サーバ名は server { listen 80; server_name example.org www.example.org; ... } server { listen 80; server_name *.example.org; ... } server { listen 80; server_name mail.*; ... } server { listen 80; server_name ~^(?<user>.+)\.example\.net$; ... } サーバ名は次の順序で考査されます:
最初にマッチしたところで検索は終了します。. ワイルドカード名
ワイルドカード名にはそのサーバ名の最初か最後のみ、そしてドットに隣接したところのみにアスタリスクが含まれます。サーバ名
特別なワイルドカードの形式 正規表現名nginx で使用される正規表現は Perl プログラミング言語(PCRE)で使用されているものと互換性があります。正規表現を使用するには、サーバ名を必ずチルダで始めます: server_name ~^www\d+\.example\.net$; チルダで始まっていないと完全一致名として、またはその正規表現にアスタリスクが含まれている場合はワイルドカード名として(そしてたいていの場合は無効なものとして)扱われてしまいます。“^” と “$” アンカーをセットし忘れないようにしてください。これらは構文的には必須ではありませんが論理的に必須です。また、ドメイン名のドットはバックスラッシュで必ずエスケープしてください。“{” と “}” 文字を含む正規表現は必ずダブルクォーテーションで囲ってください: server_name "~^(?<name>\w\d{1,3}+)\.example\.net$"; さもないと、nginx は起動に失敗し次のエラーメッセージを表示します: directive "server_name" is not terminated by ";" in ... 正規表現の名前付きキャプチャは変数としてその後で使用されます: server { server_name ~^(www\.)?(?<domain>.+)$; location / { root /sites/$domain; } } PCRE ライブラリは次の構文を使用した名前付きキャプチャをサポートしています: nginx が起動に失敗すると次のエラーメッセージを表示します: pcre_compile() failed: unrecognized character after (?< in ...
これは PCRE ライブラリが古いので server { server_name ~^(www\.)?(.+)$; location / { root /sites/$2; } } とはいえ、数字形式は簡単に上書きすることができるため、このような使用法は(上記のような)単純なケースに限るべきです。 その他のサーバ名デフォルトではないサーバブロックで “Host” ヘッダ無しのリクエストを処理させたい場合は、空のサーバ名を指定します: server { listen 80; server_name example.org www.example.org ""; ... }
nginx のバージョン 0.8.48 までは、このような場合はサーバ名としてホスト名を使用していました。 サーバ名ではなく IP アドレスを使用したリクエストが送られてきた場合、そのリクエストの “Host” ヘッダには IP アドレスが含まれているので、その IP アドレスをサーバ名として利用してそのリクエストを処理できます: server { listen 80; server_name example.org www.example.org "" 192.168.1.1 ; ... }
すべてのサーバに適合させる例では奇妙なサーバ名 “_” が使われます: server { listen 80 default_server; server_name _; return 444; } このサーバ名に特別なところはありません。単にどのサーバ名とも決してマッチしない無数の無効なドメイン名のひとつです。したがって、 “--”、“!@#” なども同様な結果を得られます。
nginx バージョン 0.6.25 までは特別なサーバ名 “*” をサポートしていて、これは誤ってすべてのサーバ名と一致するもの(キャッチオール名)として解釈されていました。この特別なサーバ名 “*”はキャッチオールまたはワイルドカードとして機能したことはありませんでした。代わりに、今は server { listen 80; listen 8080 default_server; server_name example.net; ... } server { listen 80 default_server; listen 8080; server_name example.org; ... }
最適化
完全一致名とワイルドカード名はハッシュで保存されます。このハッシュは待ち受けポートに結び付けられ、各待ち受けポートは、完全一致名のハッシュ、アスタリスクで始まるワイルドカード名のハッシュ、アスタリスクで終わるワイルドカード名のハッシュの3つまでのハッシュを持つことができます。ハッシュのサイズは構成フェーズで最適化されるので、CPU キャッシュのミスは最低でもサーバ名を見つけることができます。最初に完全一致名のハッシュが検索されます。完全一致名のハッシュを使って見つからなければ、次にアスタリスクで始まるワイルドカード名のハッシュが検索されます。さらにまだ見つからなければ、アスタリスクで終わるワイルドカード名のハッシュが検索されます。ワイルドカード名のハッシュの検索は完全一致名のハッシュの検索よりも遅くなります。これはサーバ名の検索がドメイン部分によって検索されるからです。特別なワイルドカード形式の
これらの理由から、可能な場合は完全一致名を利用するのがよいでしょう。例えば、もっとも頻繁にリクエストされるサーバ名が server { listen 80; server_name example.org www.example.org *.example.org; ... } 上記は次の単純化された形式を使用するよりも効率的です: server { listen 80; server_name .example.org; ... }
たくさんの数のサーバ名を定義したり非常に長いサーバ名を定義したりする場合は、http レベルの could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32 この場合、このディレクティブの値を次の 2 の累乗にセットします: http { server_names_hash_bucket_size 64; ... 非常にたくさんの数のサーバ名を定義した場合は次のエラーメッセージが表示されます: could not build the server_names_hash, you should increase either server_names_hash_max_size: 512 or server_names_hash_bucket_size: 32
まず最初に
待ち受けているポートがひとつだけでサーバもひとつだけの場合、nginx はサーバ名を考査しません(また、待ち受けポート用のハッシュも生成しません)。しかし一つ例外があります。 互換性
|