return 444 是 nginx 在 tcp 层主动发 rst 断连的连接级拦截,不进路由、不读 body、不生成响应,内存与 cpu 零占用;适用于未匹配 server_name 或异常 tls 握手等场景。

直接用 return 444 就能跳过整个请求生命周期,在 TCP 层立即断连,不进路由、不查 location、不读 body、不调后端、不生成响应——内存零占用,CPU 零调度。
444 的本质:连接级拦截,不是 HTTP 响应
444 不是返回一个状态码,而是让 Nginx 主动发送 TCP RST 包强制终止连接。它发生在请求解析刚完成、尚未进入 rewrite 或 proxy 阶段之前。这意味着:
- 不会分配 request 结构体,不记录请求头/体大小
- 不触发 access_log 或 error_log 中的常规日志(除非显式开启 debug 日志)
- 不走任何 upstream、fastcgi、grpc 等代理逻辑
- 不执行 Lua 脚本、不调用 auth_request、不触发 limit_req
精准匹配无效加密连接的典型场景
很多“无效加密连接”其实根本没完成 TLS 握手,或握手中携带了非法 SNI、空 Host、畸形 ALPN —— 这些在 Nginx 的 SSL 模块解析阶段就可识别。但真正高效的做法,是在 server 块层面用最轻量规则提前拦截:
- 对未配置 server_name 的 HTTPS 请求(SNI 为空或不匹配):用
default_server ssl+return 444 - 对非标准 ALPN 协议(如客户端发 h2c 或未知协议):配合
ssl_protocols和ssl_ciphers严格限制后,残留异常连接可用if ($ssl_protocol = "") { return 444; } - 对明显非浏览器的 TLS Client Hello(如 User-Agent 为空、无扩展字段、签名算法异常):需启用
ssl_preread on并结合stream模块做前置过滤,再转给 http 模块前就 return 444
配置示例:最小开销的 HTTPS 入口守门员
以下配置不依赖任何模块扩展,纯 core 指令,启动即生效:
server {
listen 443 ssl default_server;
ssl_certificate /dev/null;
ssl_certificate_key /dev/null;
# 不需要真实证书,default_server 下仅用于接收握手
return 444;
}
<p>server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;</p><h1>正常业务配置...</h1><p>}</p>
这样,所有未命中 server_name 的 HTTPS 请求(包括扫描器乱填的 SNI、工具默认域名、泛解析误打)都会被第一块捕获并立即断连,连 SSL 握手完成都不需要。
验证是否真正零消耗
观察两个关键指标即可确认效果:
- 运行
ss -s查看tcp统计中inuse数量是否稳定,异常连接不应造成 ESTABLISHED 增长 - 用
nginx -T | grep -c "return 444"确认规则已加载;再用curl -vk https://fake.example.com测试,应看到curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number或直接 connection reset,而非超时或 4xx 响应 - 对比开启前后
top -p $(pgrep nginx)中 worker 进程的 RES 内存,无波动说明未创建 request 上下文











