nginx配置层设防是最高效前置安全手段,涵盖防host头攻击(default_server白名单拦截)、防信息泄露(隐藏版本与响应头)、防资源耗尽(限流限连)、防路径与方法滥用(禁用危险方法及目录遍历)。

直接在 Nginx 配置层设防,是最高效、最前置的安全手段。针对不同攻击类型,配置逻辑清晰、生效快,且不依赖后端代码改动。
防 Host 头攻击:白名单拦截非法域名
攻击者常伪造 Host 头绕过虚拟主机路由,访问内部服务或触发缓存污染。核心做法是用 default_server 拦截所有未声明的 Host 请求:
- HTTP 和 HTTPS 各配一个
default_server块,server_name _匹配任意未定义域名 - 返回 403(而非重定向或错误页),避免暴露服务存在
- HTTPS 的 default_server 必须配有效证书,否则 TLS 握手失败,用户看到的是浏览器证书警告,不是你控制的响应
- 主业务 server 块中显式列出全部合法域名,如
server_name example.com www.example.com api.example.com
防信息泄露:隐藏版本与精简响应头
暴露 Nginx 版本、服务器类型、后端框架等,等于给攻击者递刀子:
- 全局关闭版本号:
server_tokens off;(放在 http 块) - 移除默认 Server 头:需安装
headers-more-nginx-module,加more_clear_headers "Server"; - 禁用目录列表:
autoindex off;(在 server 或 location 块中显式设置) - 禁止访问敏感文件后缀:
location ~* \.(bak|conf|sql|log|env|git)$ { deny all; }
防资源耗尽:限制请求频率与连接数
慢速攻击、爬虫刷量、暴力破解都靠高频或长连接消耗资源:
- 按 IP 限流:在 http 块定义
limit_req_zone $binary_remote_addr zone=req_per_ip:10m rate=5r/s;,再在 location 中启用limit_req zone=req_per_ip burst=10 nodelay; - 限制并发连接:
limit_conn_zone $binary_remote_addr zone=conn_per_ip:10m;+limit_conn conn_per_ip 20; - 控制请求体大小:
client_max_body_size 10m;,防大文件上传打满磁盘或内存 - 缩短超时时间:
client_header_timeout 15;、client_body_timeout 15;、keepalive_timeout 30;
防路径与方法滥用:收紧访问入口
非法路径遍历、危险 HTTP 方法都是常见攻击入口:
- 禁用非必要方法:
if ($request_method !~ ^(GET|HEAD|POST|OPTIONS)$ ) { return 405; }(放在 server 或 location 内) - 阻止目录遍历:
location ~ ..\/ { return 403; } - 拒绝访问隐藏文件:
location ~ /\. { deny all; } - 对登录、API 等高危路径单独限流,例如
location /login { limit_req zone=auth burst=3 nodelay; }











