[NGINX] IPアドレスでのアクセスを禁止する (HTTP, HTTPS)

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同様に短いですが...)

コメントする