nginx仅支持return 444实现静默断连,不发任何响应;244不在其状态码白名单中,配置会导致启动失败。444在解析阶段终止请求,跳过rewrite、proxy_pass、access_log等全部后续流程,开销最低。

不能使用 return 244,因为 Nginx **根本不支持状态码 244**。
return 支持的“丢弃连接”状态码只有 444
Nginx 提供的唯一能真正中断连接、不发任何响应体、不走后续处理流程的状态码是 444。它不是 HTTP 标准码,而是 Nginx 自定义的“关闭连接”指令:
- 客户端收不到任何 HTTP 响应(包括响应头),TCP 连接被服务端直接 RST 或 FIN 关闭;
- 所有后续配置(rewrite、proxy_pass、access_log、甚至日志写入)全部跳过;
- 内存和 CPU 开销极低,适合拦截扫描、恶意 UA、非法路径等无效请求。
为什么 244 不行
Nginx 的 return 指令对状态码有严格白名单限制。根据官方文档及各版本实测(含 1.20–1.25),244 不在可接受范围内。若配置:
return 244;会导致 Nginx 启动失败,报错类似:
或更明确的提示:“unknown error code”。
正确用法:用 444 彻底切断连接
示例场景 —— 屏蔽无 Host 头、空 User-Agent 或已知爬虫 IP:
- 在 server 或 location 块中直接写:
if ($host = "") { return 444; } - 拒绝特定 UA:
if ($http_user_agent ~ "(sqlmap|nikto|wget)") { return 444; } - 匹配非法路径前缀:
location ^~ /wp-admin/ { return 444; }
这些配置生效后,Nginx 在解析阶段就终止请求,不会创建 upstream 上下文、不分配 buffer、不记录 access_log(除非你显式启用了 log_not_found 且该日志在 return 前触发)。
注意:444 和其他“拦截码”的区别
对比常见选项:
- return 403:仍会构造完整 HTTP 响应(含 header + body),占用内存、触发日志、可能被 WAF 或 CDN 缓存;
- return 444:零响应体,连接静默断开,无日志干扰(默认不记 access_log),最轻量;
- return 404 或 405:同样要生成错误页,消耗资源;
- deny + return 444 组合无意义 —— deny 本身已终止,再 return 属于冗余。











