NGINXではIPアドレス直打ちでアクセスされた場合はdefault_serverに設定されたサイトへと接続されますが、弾きたい場合も多いと思います。
任意のconfファイル(/etc/nginx/conf.d/default.conf 等)に以下の設定を書くだけで、IPアドレスでのアクセスを拒否することができます。
server {
listen 80 default_server; #IPv4
listen [::]:80 default_server; #IPv6
server_name _;
return 444; #404でも可
}
server {
listen 443 ssl http2 default_server; #IPv4
listen [::]:443 ssl http2 default_server; #IPv6
server_name _;
ssl_certificate /etc/nginx/cert/server.crt;
ssl_certificate_key /etc/nginx/cert/server.key;
return 444; #404でも可
}
別の設定でdefault_serverを設定していた場合はそちらを削除しておくことが必要です。
HTTPSでのアクセスも弾く場合はssl_certificateの設定が必要になりますが、オレオレ証明でも問題ないので適当に発行しておきましょう。
# mkdir -p /etc/nginx/cert
# openssl req -new -x509 -sha256 -newkey rsa:2048 -days 3650 -nodes -out /etc/nginx/cert/server.crt -keyout /etc/nginx/cert/server.key
# chmod -R 0400 /etc/nginx/cert/*;
ちなみに、ZeroSSLではIPアドレスに対してSSL証明証を発行できるのでこちらを使用してもいいかもしれません。(有効期限はLet's Encrypt同様に短いですが...)