生产环境nginx安全加固三道防线:一、设server_tokens off隐藏版本信息;二、用limit_except限制http方法仅允许get/head/post;三、通过location规则禁用敏感路径、隐藏文件及危险后缀访问。

直接在 Nginx 配置中关闭版本暴露、禁用危险请求方法、控制访问源头,是生产环境最基础也最关键的三道防线。不依赖额外模块,纯原生配置即可落地。
一、彻底隐藏 Nginx 版本与服务标识
默认 Server 响应头如 Server: nginx/1.24.0 会暴露具体版本,便于攻击者匹配已知漏洞。只需一条指令即可收敛信息:
- 在
http{}块(全局生效)或server{}块(单站点生效)中添加:
server_tokens off; - 保存后执行
nginx -t检查语法,再运行nginx -s reload生效 - 验证方式:用
curl -I https://your-domain.com查看响应头,应仅显示Server: nginx或完全不出现该字段 - 注意:该设置同时让 4xx/5xx 错误页不再显示版本文字,无需额外处理错误页模板
二、限制 HTTP 请求方法,封堵非常规操作
绝大多数 Web 应用仅需 GET、HEAD、POST 三种方法。开放 PUT、DELETE、TRACE 等易被用于探测、上传或重放攻击。
- 在
server{}或关键location{}块中使用limit_except:
deny all;
}
- 该配置会拒绝除 GET、HEAD、POST 外的所有方法,返回 405 Not Allowed
- 若业务明确不需要 HEAD,可精简为
limit_except GET POST { deny all; } - 避免在根 location 使用过于宽松的写法(如只限制 /api 下),应优先覆盖全站主入口
三、阻断敏感路径与文件访问
防止目录遍历、配置泄露、备份文件下载等低级但高危风险。
- 禁用自动索引(防目录列表):
autoindex off;(确保未在任何location中设为on) - 屏蔽隐藏文件与临时文件:
location ~* /\. { deny all; }
location ~* ~$ { deny all; } - 禁止访问常见敏感后缀:
location ~* \.(conf|log|bak|swp|sh|sql)$ { deny all; } - 以上规则建议放在
server{}块顶部,确保优先匹配
四、强化请求头与基础访问控制
从协议层和客户端行为两个维度收紧入口。
- 校验 Host 头,防虚拟主机劫持:
if ($host !~ ^(example.com|www.example.com)$) { return 403; } - 限制代理转发范围(如用作反向代理时):
明确proxy_pass目标,配合if ($request_uri ~* "/admin|/phpmyadmin") { return 403; } - 禁止传递后端敏感头(防信息回传):
proxy_hide_header Server;
proxy_hide_header X-Powered-By; - 设置最小权限运行用户(非 root):
在配置文件开头确认存在 user nginx nginx;,且系统用户无登录权限(/sbin/nologin)











