LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

Nginx 跑起来了,这 4 处安全配置你大概率没动

admin
2026年10月19日 22:48 本文热度 162

装完 Nginx,站点能打开,配置就算交差了。多数人不会再把配置文件翻第二遍——直到访问日志里开始出现一串串扫描请求,你才想起来看一眼响应头。

Nginx 官方默认配置是照着「快速上手」调的,能跑,但不设防。我每次上线前会补的,就是下面这 4 处。

1默认 Nginx,跑通了却没设防

Nginx 站在最前面,是反向代理,也是所有流量进后端的网关。这个位置一方面替你转发请求,另一方面也替攻击者打量你的内部。

客户端Nginx反向代理 / 网关所有请求经此转发后端服务版本号泄露Server: nginx/x.x.x无安全响应头劫持 / 嗅探 / XSS 无防护无任何限流单 IP 可刷爆接口隐藏文件可访问.git / .env 直接被抓Nginx 站得越靠前,默认暴露的口子越该堵
Nginx 作为网关,默认就给攻击者留了这几扇门

具体到这四条,都是官方文档白纸黑字写着的默认值,不是我推测的:

server_tokens 默认 on,响应头带完整版本号;autoindex 默认 off,但一旦你在某个 location 里打开过,目录结构就摊开了;而安全响应头和限流,官方压根没给你配——limit_req 是空配置,X-Frame-Options 这类头一个都不发。

你可能会说,Nginx 自身代码够硬。确实硬,但它也出过真漏洞。2019 年 HTTP/2 实现被报出 CPU 与内存耗尽(CVE-2019-9511,1.17.3 修复),2021 年 DNS 解析器存在一字节内存覆盖(CVE-2021-23017,影响 0.6.18 至 1.20.0)——注意,这条只在配置里用了 resolver 指令的前提下才成立。

但翻完整份官方安全公告列表你会发现一件事:这些补丁加起来也没几条,反倒是没人动过的默认配置,把口子一直开着。

2我补的 4 处配置

下面每条都是几行的事,改动成本极低,收益却肉眼可见。顺序按暴露面从外往里排。

① 藏版本号

默认响应头长这样:Server: nginx/1.24.0。攻击者扫到这一行,等于你主动报了软件名和版本,他拿着去 CVE 库一比,你哪些洞没补就一清二楚。加一行 server_tokens off; 后,只剩 Server: nginx,版本号没了。

做法:写在 http 块;顺手配自定义错误页,否则错误页底部还印着版本。


② 全站 HTTPS,再加 HSTS

只监听 80 意味着明文传输,链路上任何一跳都能看见你发什么。先把 HTTP 跳过去:return 301 https://$host$request_uri;。再告诉浏览器「以后别走 HTTP 了」:add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;。协议版本收一下:ssl_protocols TLSv1.2 TLSv1.3;。

做法:证书用受信任 CA;HSTS 先在测试域名跑两周,确认全站 HTTPS 无死角再上正式域名,别急着 preload——一旦有子域还在跑 HTTP,浏览器会硬拦。


③ 补上浏览器侧的安全响应头

浏览器本来能替你挡掉一批攻击,前提是服务器明确告诉它。Nginx 默认一个都不发。至少补三道:X-Frame-Options "SAMEORIGIN" 挡住 iframe 套壳的点击劫持;X-Content-Type-Options "nosniff" 不让浏览器猜文件类型;再加一条 Content-Security-Policy 收住脚本来源。

做法:三条都写 http 块并带上 always,否则只在 200 响应里生效;CSP 先设宽松值,看控制台报错再收紧,一上来就 default-src 'self' 容易把静态资源全拦了。


④ 限流,再收掉危险动作

没有限流,一个脚本就能把登录接口刷到不可用。先在 http 块定义 zone:limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;,再到 location 里套:limit_req zone=api burst=20 nodelay;。登录接口单独一个更严的 zone。危险方法收掉:limit_except GET HEAD POST { deny all; }。上传大小给个上限:client_max_body_size 10m;,再把几个超时写死。

做法:burst 按真实峰值调,别把正常用户限成 503;上传上限按业务最大文件给,宁可改配置也别留无限;超时明确设置,slowloris 这类慢速攻击靠它挡。

① 藏版本号信息泄露攻击者按版本号比对 CVE② HTTPS+HSTS明文 / 协议降级链路截获账号密码③ 安全响应头点击劫持 · MIME 嗅探 · XSS浏览器侧加固④ 限流 + 超时暴力破解 · CC · 慢速攻击限流 + 超时挡洪流
4 处配置,从外到内卡住四道门

3为什么先动这 4 处

按「改动成本 / 收益」排序,这四处排在最前面。

第①处只是一行 server_tokens off;,成本几乎为零,却能让自动化扫描少收集一条关键指纹。第②处是唯一一道防「链路窃听」的门,值不值不用讨论。第③处三道响应头,改完前端几乎无感,但点击劫持和 MIME 嗅探这类老问题会一起消失。第④处才是扛压力的那层——它不防被攻破,防的是被拖垮。

顺着这个顺序,你会发现自己是从「别让对方知道你是谁」开始,一路走到「别让对方拖垮你」。

4上线前照着过一遍

五条,改完 nginx -t 过一遍再 reload:

  1. server_tokens off;
     放 http 块,顺手把错误页也换成自定义的。

  2. HTTP 全量 301 到 HTTPS,配 HSTS(先在测试域名跑);ssl_protocols 只留 TLSv1.2 和 TLSv1.3。

  3. 三条响应头带 always 参数:X-Frame-Options、X-Content-Type-Options,再加 CSP。

  4. limit_req
     上登录和关键接口,limit_except 收掉危险方法,上传上限和超时都写明确值。

  5. 隐藏文件一律 deny:location ~ /\. { deny all; },.git 和 .env 不能给外面看。

补充一句:Nginx 版本本身也要跟上。官方安全公告页会列出每条漏洞的影响区间,跑之前对一下自己的版本号,比事后补救便宜得多。

Nginx 帮你扛流量,也帮攻击者摸清你的底牌。这层底牌,就在配置文件里。


阅读原文:原文链接


该文章在 2026/10/20 12:03:53 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-2  粤公网安备44030602007207号