单纯靠重定向无法屏蔽非法嗅探,真正有效的是让80端口对非法Host请求返回444、禁用默认server块、隐藏版本号、自定义错误页并配合防火墙限制访问。

单纯靠重定向无法屏蔽非法嗅探,它只能把 HTTP 请求转走,但端口本身仍开放、仍可被探测或发起连接。真正有效的安全加固,是让 80 端口不响应非法请求,同时确保合法跳转行为可控、不暴露后端细节。
只对已知域名做精准 301 跳转
避免使用 server_name _; 或通配符匹配所有 Host。攻击者常伪造 Host 头发起探测,若 Nginx 对任意 Host 都返回 301,等于主动确认该 IP 正在运行 Web 服务,反而暴露存在性。
应明确列出允许跳转的域名:
server_name example.com www.example.com;- 不在列表中的请求,统一返回 444(Nginx 特有“关闭连接”状态码),不发任何响应头或 body
- 这样既阻断非法 Host 探测,又不影响真实用户访问
禁用默认 server 块响应
Nginx 启动时总会有一个默认 server 块处理未匹配的请求。若未显式配置,它可能返回默认欢迎页或版本信息,泄露 Nginx 版本等敏感数据。
做法是添加一个“兜底” server 块,监听 80 端口但不做跳转:
server { listen 80 default_server; return 444; }- 放在所有其他 server 块之前,确保它优先匹配未声明的请求
- 444 状态码会让连接直接断开,无响应、无日志(默认)、无指纹泄漏
关闭不必要的响应头与错误页
即使做了跳转,Nginx 默认可能返回 Server: nginx/1.18.0 这类头,或在出错时显示带版本号的错误页,都属于信息泄露。
在对应 server 块中加入:
-
server_tokens off;—— 隐藏版本号 -
error_page 400 403 404 405 497 /404.html;+ 自定义精简错误页(不含服务器标识) - 避免使用
rewrite ... permanent,改用return 301,更轻量、更可控、不触发正则引擎
配合防火墙限制非必要访问
重定向是应用层手段,底层防护不能缺。建议补充:
- 用
ufw或iptables限制 80 端口仅允许主流搜索引擎 User-Agent(如 Googlebot、Bingbot)或已知 CDN IP 段访问(可选) - 对高频、无 Host 头、User-Agent 为空或含扫描特征(如 sqlmap、nmap)的请求,直接 DROP
- 注意:此步需谨慎测试,避免误伤正常爬虫或移动端请求











