0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Nginxのserver_nameについて

Posted at

Nginxの設定においてリクエストがserver_nameに合致しない場合などの挙動への理解が曖昧だったのでserver_name周りについて調べてまとめました。
リクエスト処理の流れについてはこちら参考

1. server_name の基本

server_nameは、Host ヘッダーに基づいてリクエストをどのserverブロックで処理するかを決める設定。

e.g. http://example.comのリクエストが以下のserverに割り当てられる。

server {
    listen 80;
    server_name example.com;
}

2. server_name のマッチングルール

  1. 完全一致(Exact Match)
    • server_name example.com; -> Host: example.com に完全一致した場合のみ適用
    • www.example.comには適用されない
  2. ワイルドカード(*.example.com)
    • 先頭(*.example.com)または末尾(example.*)にワイルドカードを使用可能
    • server_name *.example.com; -> www.example.comapp.example.comにマッチする
    • ただし、example.comにはマッチしない
  3. 正規表現(Regex Match)
    • ~を付けると、正規表現(PCRE)でマッチ
    • server_name ~^www\d+\.example\.com$; -> www1.example.com, www2.example.comなどにマッチ

3. server_name の優先順位

リクエストがNginxに届いたとき、次の順でserver_nameを評価する

  1. 完全一致(Exact Match)が最優先
  2. ワイルドカード(前方一致 .example.com や example.
  3. 正規表現(Regex Match ~^www\d+.example.com$)
  4. デフォルトの server(default_server の指定があるもの or 最初の server)

4. server_name が合致しない場合

NginxはリクエストのHostヘッダーに一致するserver_nameを持つserverを探すが、見つからない場合はデフォルトのserverが適用される。
デフォルトのserverは以下のいずれかになる。

  1. default_serverが指定されているserver
  2. 指定がない場合、設定ファイル内で最初に定義されたserver

e.g. default_serverを指定する場合

server {
    listen 80 default_server;
    ...
}

5. server_name _; の挙動

server_name _;はserver_name に該当しないリクエストを処理するための一般的な設定。
「すべてのリクエストを受け入れる」設定ではない。
Hostヘッダーが空の場合にも適用される。

6. server_name_in_redirect

Nginxのserver_nameをリダイレクト時に使うかどうかを制御

e.g. Nginxはリダイレクト時にserver_nameではなくHostヘッダーを使用する

server {
    listen 80;
    server_name example.com;
    server_name_in_redirect off;
}

ref

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?