nginxのdefault serverを無効化する

ドメインを使わずにIPアドレスなどでアクセスされた場合にコンテンツを表示させないようにする方法。正確にはdefault serverを無効化する方法ではなく、default serverで何もしなくする方法である。

HTTPの場合

server {
  server_name _;
  listen 80 default_server;
  listen [::]:80 default_server;      # IPv6を使っていない場合はこの行は不要
  return 444;
}

return 444とするとnginxは何も返さずコネクションを切断します。これはバージョン1.15.2以降で使用できます。

402(カネ払え)や418(コーヒーは淹れてやんねー)などをreturnしてみるのも一興

HTTPSの場合

server {
  server_name _;
  listen 443 ssl default_server;
  listen [::]:443 ssl default_server; # IPv6を使っていない場合はこの行は不要
  ssl_reject_handshake on;
}

ssl_reject_handshake onとするとTLS接続要求を拒否してコネクションを切断します。ただしssl_reject_handshakeを使用できるのはバージョン1.19.4以降です。

IPアドレスで接続してくるのはbotか攻撃のいずれかなのでアクセス拒否してしまって問題ありません。無駄なログも出なくなるのでスッキリします。