nginxの設定でdefault_serverの設定があると要求が一致しないとデフォルトサーバーに要求を返す

最近、触る機会が多いリバプロとして使っているnginxの記事です。

 

nginxの設定でdefault_serverの設定があると要求が一致しないとデフォルトサーバーに要求を返すそうです。


複数サーバーを設定している場合に、ホストの検索に失敗すると「default_server」に指定してあるサーバーにルーティングされてしまいます。つまり、設定ミスなどで予想外の動作をすることがあります。

 

server {
listen 80 default_server;
server_name example.net www.example.net;
...
}

 

 

以下は公式サイトの機械翻訳です。

http://nginx.org/en/docs/http/request_processing.html

 


この設定では、nginxは要求のヘッダーフィールド "Host"のみをテストし、要求をどのサーバーにルーティングするかを決定します。その値がサーバー名と一致しないか、要求にこのヘッダーフィールドがまったく含まれていない場合、nginxはこのポートのデフォルトサーバーに要求をルーティングします。上記の設定では、デフォルトのサーバーが最初のものです。これはnginxの標準のデフォルト動作です。listenディレクティブのdefault_serverパラメータを使用して、どのサーバをデフォルトにするかを明示的に設定することもできます。

 

別のファイルにバーチャルサーバの設定を記載して、そこを参照するようにも設定できます。リバプロでは複数のサーバを振り分ける場合に便利な設定ですね。


各種設定変更をした場合は、動作確認はしっかりと行わないと思わぬ挙動をすることがあるので注意が必要ですね。