Nginx 安装后须执行五项基础安全加固:1. 关闭 server_tokens 隐藏版本号;2. 限制 HTTP 方法仅允许 GET/HEAD/POST;3. 删除默认站点、禁用 autoindex 并关闭 default_server;4. 拦截 .git、.env.bak 等敏感路径;5. 设置请求体/头超时、上传大小限制及可选的单IP限速。

安装完 Nginx 后,若未及时调整默认配置,极易暴露敏感信息、引发目录遍历、遭受恶意扫描甚至被利用为代理跳板。以下五项检查无需复杂操作,但能快速堵住常见安全缺口。
1. 隐藏 Nginx 版本号(防止针对性攻击)
Nginx 默认在响应头(Server 字段)和错误页面中显示版本号,攻击者可据此查找已知漏洞。需在主配置文件(通常为 /etc/nginx/nginx.conf)的 http 块内添加:
- server_tokens off; —— 关闭所有响应头和错误页中的版本标识
修改后执行 nginx -t 测试语法,再 systemctl reload nginx 生效。验证方式:用 curl -I 访问任意 URL,确认响应头中 Server 字段仅显示 “nginx”,不带版本数字。
2. 禁用未使用的 HTTP 方法(减少攻击面)
除 GET、HEAD、POST 外,PUT、DELETE、TRACE、OPTIONS 等方法在静态服务中通常无用,可能被用于探测或攻击。可在 server 或 location 块中限制:
- if ($request_method !~ ^(GET|HEAD|POST)$) { return 405; }
注意:避免在 location / {} 中直接使用 if(Nginx 官方不推荐),建议放在更具体的路径下;若需全局限制,可置于 server 块顶层。返回 405(Method Not Allowed)比 403 更符合语义。
3. 关闭不必要的默认站点与根目录索引
Debian/Ubuntu 的默认配置常启用 default_server 并开启 autoindex,导致任意 IP 直接访问时列出整个 /var/www/html 目录结构。
- 检查 /etc/nginx/sites-enabled/ 下是否有未修改的 default 文件,删除或重命名
- 确保所有 server 块中均设置 index index.html index.htm;,且不含 autoindex on;
- 如无反向代理需求,将监听 80 端口的 default_server 显式设为 return 444(关闭连接)或 404
4. 限制敏感路径访问(如 .git、.htaccess、备份文件)
开发者遗留的隐藏文件或备份(如 .env.bak、config.php~)可能被直接下载,泄露数据库凭证等关键信息。在 server 块中添加统一拦截规则:
- location ~ /\.(git|htaccess|svn|bak|swp|old|orig|log|conf|yml|json|env)$ { deny all; }
- 补充:对 /usr/share/nginx/html/ 等默认文档根路径,也可加 location ~ ^/\. { return 404; } 阻断所有点开头路径
该规则优先级高于常规 location,无需担心影响正常资源。
5. 启用基础请求限制与超时控制
防范慢速攻击(如 Slowloris)和暴力扫描,应在 http 块中配置全局防护参数:
- client_max_body_size 1m; —— 限制上传大小,防大文件耗尽内存
- client_header_timeout 10; client_body_timeout 10; —— 缩短请求头/体读取等待时间
- send_timeout 10; —— 响应发送超时,中断卡住的连接
- (可选)添加 limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s; 及对应 limit_req 指令,限制单 IP 请求频率
数值可根据业务微调,但绝不应保留默认的 60s 超时——攻击者会利用长连接持续占用 worker 进程。

















