配置 default_server 是防止未绑定域名恶意解析最直接有效的方式,需为IPv4/IPv6的80和443端口分别显式声明,HTTPS须配有效证书,推荐 return 444 终止连接,server_name 可留空或填占位符\_,实际匹配仅依赖 listen ... default_server。

配置 default_server 是防止未绑定域名恶意解析最直接有效的方式。它不依赖 server_name 匹配,而是在请求无法命中任何已定义的虚拟主机时,由 Nginx 主动接管并执行预设策略,从而避免暴露真实站点、泄露目录结构或被搜索引擎误收录。
明确声明 default_server 并覆盖全协议栈
必须在 listen 指令后显式添加 default_server,且同一端口+协议组合下仅能有一个。IPv4 和 IPv6 需分别设置,否则可能遗漏访问路径:
-
listen 80 default_server;—— 处理所有未匹配的 HTTP 请求(IPv4) -
listen [::]:80 default_server;—— 补全 IPv6 的 80 端口兜底 -
listen 443 ssl http2 default_server;—— HTTPS 的 IPv4 默认入口 -
listen [::]:443 ssl http2 default_server;—— HTTPS 的 IPv6 默认入口
若只配 IPv4 而忽略 IPv6,攻击者可通过 IPv6 地址绕过防护;若两个 listen 443 ssl default_server 共存,Nginx reload 会报错“duplicate default_server”。
返回 444 或 403,而非重定向或 404
对恶意解析请求,应立即终止连接或明确拒绝,避免产生响应体或泄露任何信息:
-
推荐用
return 444:Nginx 特有状态码,直接关闭 TCP 连接,不发任何响应头或正文,客户端表现为“连接被拒绝”,最彻底防探测 -
次选用
return 403:返回标准拒绝响应,适合需记录日志或兼容某些监控工具的场景 - 避免
return 301/302或跳转到首页:会暴露主站域名,反而助涨恶意解析;也别用return 404,因它仍返回完整 HTML 页面,可能含服务器版本、路径等敏感信息
HTTPS default_server 必须提供有效证书
443 端口的 default_server 若启用 SSL,就必须配置 ssl_certificate 和 ssl_certificate_key,否则 Nginx 启动失败。无需使用业务域名证书,可单独准备一组自签名或泛用证书:
- 证书路径可指向任意合法 PEM 文件(如
/etc/nginx/ssl/default.crt),内容无需与请求 Host 匹配 - 不建议复用业务证书,以防私钥暴露风险;也不必申请新域名,自签名即可满足握手需求
- 若暂无证书,可先禁用 HTTPS 的 default_server,但务必确保 80 端口的 default_server 已启用并返回 444
server_name 可留空或填占位符,不影响兜底逻辑
server_name 在 default_server 中纯属形式字段,Nginx 完全不依赖它做匹配。常见写法如 server_name _; 或 server_name ""; 或干脆省略,效果一致:
- 下划线
_是约定俗成的“无效域名”占位符,无特殊含义,只是视觉上表明此块不服务真实业务 - 写成
server_name example.com;也不会导致该域名被实际响应——只要没加default_server,它就只是普通 server;加了default_server,哪怕写server_name www.baidu.com;,照样兜底所有未匹配请求 - 真正起作用的只有
listen ... default_server这一组合
不复杂但容易忽略

















