nginxで複数のバーチャルホストが設定されている時のデフォルトサーバ

nginx を使って複数のバーチャルホストを設定していて、
IPアドレスや、設定されていないホスト名でアクセスがあった時に表示するデフォルトサーバが、
おかしくなったので調査した事のメモ。

nginx.conf を流用して バーチャルホストの設定を conf.d に追加していくと、
include conf.d/*.conf で.confのつくファイルが全て読み込まれてしまうため、
順番がどうなっているのか分からなくなってしまいます。

バーチャルホストを設定するコンフィグファイルを include する順番を書いておけば、
こういった問題は起こらないと思います。

Apache だと apachectl -S とかで読み込まれたコンフィグの中で、
どのファイルが default server になっているかが確認出来るので便利なのですが、
nginx だとそういうコマンドがあるのか分かりません。

調べたところいくつか設定されたバーチャルホストの設定から、
明示的に default server を指定する方法があったのでメモしておく。

http の場合

listen 80 default_server;

https の場合

listen 443 ssl default_server;

バーチャルホスト設定内の listen ディレクティブに
default_server と書いておくと、
複数あるバーチャルホスト設定の中からその設定をdefault server として使用する。