デフォルトサーバを設定しておかないと幾つかのバーチャルホストがあった場合は設定が読み込まれた順番で最初のサーバがデフォルトサーバになり、存在しないドメインのアクセスで関係のないデフォルトサーバのバーチャルホストが表示されてしまいます。明治的にデフォルトサーバを設定しておく必要があります。
nginxでデフォルトサーバの設定
デフォルトサーバとは設定ファイル上にないドメイン(IP直打ちのアクセスも)からサーバへのアクセスがあった場合にアクセスを受けるバーチャルホストのことです。
基本的にはバーチャルホストごとに設定を行うために、設定のないドメインに対してどこかのバーチャルホストが勝手に返されても困ることが多いので、空のhtmlやエラーを返すように設定します。
デフォルトサーバは明示的に指定する
デフォルトサーバは明示的に指定しないと、最初に読み込んだバーチャルホストがデフォルトサーバになってしまいます。
設定は下記のように listenディレクティブでdefault_serverと記述します。
設定のないドメインやIP直打ちへのアクセスは攻撃の場合もあるのでレスポンスを返さないでコネクションを閉じるnginxの特殊エラーコード444を返すのが良さそうです(公式より)
server {
listen 80 default_server;
server_name ""; #最近のバージョンではこれがデフォルトなので省略可
return 444;
}
server {
listen 443 default_server;
server_name "";
return 444;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
}
nginxドキュメント:https://nginx.org/en/docs/http/request_processing.html
サーバーの証明書は自己証明書を発行しています。
curlでサーバのIPに接続するとemptyが返ってきます。
# curl -iL hogehoge.example.com
curl: (52) Empty reply from server
自己証明書の作り方は下記記事を参考にしてください
自己証明書(オレオレ証明書)をopensslコマンドで作成する