ドメインを使わずに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か攻撃のいずれかなのでアクセス拒否してしまって問題ありません。無駄なログも出なくなるのでスッキリします。