Nginx生产配置必须满足防攻击、可审计、合等保要求:严格校验IP控制顺序,优先allow再deny;CDN场景需用set_real_ip_from+X-Forwarded-For;敏感路径叠加auth_basic与bcrypt密码文件;禁用危险HTTP方法及敏感文件访问;关闭autoindex和server_tokens;启用独立access_log并限流登录接口。

Linux 下 Nginx 在生产环境中不能只求“能用”,必须默认按“防攻击、可审计、合等保”来配置。真实事故往往不是来自高级漏洞,而是暴露版本号、目录遍历、HTTP 方法放行、日志缺失或 IP 控制顺序错乱这些基础项。下面几条是踩过坑、验过等保、跑过流量的硬核配置要点。
IP 白名单与 deny/allow 顺序必须严格校验
这是最常用也最容易翻车的访问控制方式。核心原则:规则自上而下匹配,命中即终止。
- 务必把 allow 放在 deny all 前面,否则所有请求都会被拦截
- 若使用 CDN(如 Cloudflare、阿里云全站加速),直接配置 allow 1.2.3.4 会失效,因为 $remote_addr 是 CDN 节点 IP,不是用户真实 IP
- 正确做法是先配置
set_real_ip_from+real_ip_header X-Forwarded-For,再基于 $remote_addr 做 allow/deny - 内网管理后台建议组合使用:仅允许跳板机 IP + 内网段 + 拒绝 all,避免开发误挂公网后裸奔
敏感路径强制基础认证(auth_basic)+ 密码文件权限加固
对 /admin、/api/debug、/metrics 等非公开路径,不能只靠 IP 限制,必须叠加身份验证。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 使用
auth_basic "Restricted Area"和auth_basic_user_file /etc/nginx/.htpasswd - .htpasswd 文件必须由
htpasswd -B(bcrypt 加密)生成,禁用明文或 crypt 格式 - 文件权限设为 640,属主属组为 root:nginx,防止被 Web 进程意外读取泄露
- 不建议在 location 中混用 allow + auth_basic,优先级易混淆;推荐先做 IP 筛选,再在通过 IP 的 location 内启用 auth_basic
禁止危险 HTTP 方法 + 隐藏敏感文件访问
默认 Nginx 允许所有标准方法,但 PUT、DELETE、TRACE、OPTIONS(未处理时)可能被滥用于探测或上传。
- 在 server 或 location 块中添加:
limit_except GET HEAD POST { deny all; },只放行业务必需方法 - 屏蔽 .env、.git、.bak、.swp 等敏感文件:
location ~ /\.(env|git|bak|swp|log)$ { deny all; } - 关闭 autoindex:
autoindex off;,防止目录无 index.html 时自动列目录 - 隐藏 Nginx 版本号:
server_tokens off;,避免暴露 nginx/1.24.0 这类精确版本信息
日志审计与限流兜底,满足等保三级基本要求
等保三级明确要求“访问行为可追溯”和“防暴力破解”,Nginx 层需承担第一道防线。
- access_log 必须启用,并写入独立路径(如
/var/log/nginx/app_access.log),不可与 error_log 混用 - 配合 logrotate 设置保留周期 ≥180 天,且日志权限为 640,属主 root:adm
- 对登录类路径(如 /login、/oauth/token)配置限流:
limit_req_zone $binary_remote_addr zone=auth:10m rate=5r/m;+limit_req zone=auth burst=3 nodelay; - 错误日志级别建议设为
warn或error,避免 info 级别淹没关键告警

















