最可靠方式是配置带default_server标识的兜底server块,用server_name _占位并return 444或403;关键在listen指令显式声明default_server,而非依赖server_name _匹配,且http与https端口须分别设置唯一default_server。

直接配置一个带 default_server 标识的兜底 server 块,用 server_name _ 占位,并返回 444 或 403,是最可靠的方式。关键不是“设默认 server_name”,而是主动指定谁来兜底非法请求。
必须加 default_server 标识
Nginx 不会因为某个 server 块写了 server_name _ 就自动把它当默认入口。它只看 listen 80 default_server(或 listen 443 ssl default_server)——这个标记决定了哪个块负责处理所有不匹配的请求。
- 每个端口(80 和 443)只能有一个
default_server,重复会报错 - 建议把这个兜底块放在所有其他 server 块之前,避免加载顺序干扰
- HTTPS 的兜底块必须配 SSL 证书(哪怕只是自签占位证书),否则启动失败
server_name _ 是占位约定,不是通配符
server_name _ 本身不匹配任何真实域名,它的作用是显式表明“这个块无意服务任何合法主机名”,配合 default_server 使用才有效。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 不要写成
server_name *或正则表达式,那反而可能意外匹配非法请求 - 不写
server_name也行(此时默认值为空字符串),但加上_更清晰、更规范 - 别把
server_name _单独放在非 default_server 块里——它起不到拦截作用
返回值选 444 还是 403?
两者都可,但用途不同:
-
return 444;:静默关闭 TCP 连接,不发任何 HTTP 响应,适合防御扫描和恶意探测 -
return 403;:返回标准 HTTP 403 禁止响应,便于日志识别,也符合部分合规要求 - 避免用
return 500或跳转到首页,前者易被误判为故障,后者可能被滥用为开放重定向
检查是否生效的小技巧
配置完 reload 后,可以用 curl 快速验证:
-
curl -H "Host: fake.example.com" http://your-server-ip→ 应得空响应(444)或 403 -
curl -H "Host:" http://your-server-ip(空 Host 头)→ 同样应被拦截 -
curl http://your-server-ip(无 Host 头的 HTTP/1.0 请求)→ 也走 default_server - 确认
nginx -t通过,且没有其他块也带default_server










