应配置 default_server 的 HTTPS 服务块,显式声明 listen 443 ssl http2 default_server; 和 server_name _;,加载自签名证书并用 return 444 主动断连,实现无响应兜底拦截。

要在 Nginx 中安全兜底拦截所有未授权的 HTTPS 访问,核心不是“配一个能用的默认证书”,而是通过协议层控制主动拒绝——让非法域名请求在 TLS 握手后立刻断连,不返回任何响应,也不暴露服务信息。
明确标记 default_server 并置于监听首位
每个 443 端口只能有一个 default_server,它会在 Host 头不匹配任何 server_name 时生效。必须显式声明,不能依赖配置顺序:
- 在 listen 指令后紧跟 default_server,例如:
listen 443 ssl http2 default_server; - IPv4 和 IPv6 需分别设置,如还需支持 IPv6,加一行:
listen [::]:443 ssl http2 default_server; - 该 server 块应放在所有业务 server 块之前或之后均可,但不能遗漏 default_server 标识
用 server_name _ 显式表示兜底意图
server_name _; 是约定写法,不代表真实域名,仅用于语义上表明这是通配兜底块,避免误配成可被解析的域名:
- 不要写
server_name *;(Nginx 不识别)或留空(行为不可靠) - 不要为这个兜底块配置真实业务域名,否则可能被恶意 DNS 解析劫持
- 若同时需拦截 HTTP 请求,另配一个
listen 80 default_server;块,同样用server_name _;
必须加载证书,但仅用于完成握手
HTTPS 请求必须完成 TLS 握手才能触发 return 444,因此 ssl_certificate 不可省略,但无需是有效可信证书:
- 可用自签名证书(如 OpenSSL 生成的临时 cert/key),只要格式正确、能加载即可
- 证书内容无关紧要,重点是防止因缺失证书导致 Nginx 启动失败或整个 HTTPS 服务瘫痪
- 切勿复用业务证书——避免在拒绝连接时意外泄露域名或证书信息
用 return 444 主动关闭连接
return 444 是 Nginx 特有状态码,表示立即关闭 TCP 连接,不发任何 HTTP 响应,比 403/444 更隐蔽:
- 写法简单:
return 444;,放在 location 或 server 块内均可 - 不建议用
return 403;或return 444;(后者不存在),更不要返回页面或重定向 - 高版本 Nginx(1.19.4+)可配合
ssl_reject_handshake on;在握手阶段就拒绝,但兼容性不如 444 广泛


















