Nginx 学习(二)处理用户仅使用 IP 访问时服务器返回 SSL 证书泄露域名等问题

给网站套上 Cloudflare 防止被打和缓存部分静态文件应该是常规操作了,但是想起来之前好像见到过的帖子:第一次知道 HTTPS 会暴露服务器 IP,在新的服务器上试验了一下发现在访问 https:// 服务器 IP 的时候真的会返回 Nginx 配置中的第一封 SSL 证书而泄露域名,在这种全网扫 IP 成本极低的年代真的是很危险……于是还是决定稍作配置以排除掉这个危险因素。


1、80 端口常规配置
在用户用 IP 直接访问时返回 500 错误。

    # ========= 基础配置 =========
    # 禁止 IP 直接访问
    server {
        listen      80;
        listen      [::]:80;
        server_name _;

        location / {
            return      500;
        }
    }

直接访问 http:// 服务器 IP:80 端口效果:

2、443 端口配置
参考文章:【小教程】Nginx 默认拒绝发送证书设置教程

    # 防止发送 SSL 证书
    server {
        listen      443 ssl http2 default_server;
        server_name _;

        ssl_protocols           TLSv1.2 TLSv1.3;
        # 启用拒绝 TLS 握手
        ssl_reject_handshake    on;
        # SSL Session 缓存,不设置的话无缓存配置不生效
        ssl_session_cache       shared:SSL:10m;
        ssl_session_timeout     10m;

        # log 位置自行替换
        access_log  /rab/log/nginx/access.log;
    }

这样配置之后的访问效果:

ERR_SSL_UNRECOGNIZED_NAME_ALERT 就是我们想要的效果。

至此配置结束。