Nginx统一准入保护通过auth_request委托鉴权、allow/deny实现IP白名单、limit_req_zone按App-ID限流、location拦截敏感路径并标准化请求。

用 Nginx 对内部 API 做统一准入保护,核心是把鉴权、限流、IP 控制等逻辑前置到反向代理层,避免每个服务重复实现,也便于集中管控和审计。
基于请求头或 Token 的身份校验
Nginx 本身不直接解析 JWT 或调用 OAuth2 服务,但可通过 auth_request 指令将认证委托给一个轻量认证服务(如用 Flask/FastAPI 写的校验接口)。Nginx 把原始请求头(如 Authorization)透传过去,根据该服务返回的 200/401 决定是否放行。
示例配置片段:
location /api/ {auth_request /auth;
proxy_pass http://backend;
}
location = /auth {
internal;
proxy_pass https://auth-service/validate;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
按 IP 或网段做白名单控制
适用于内网调用场景。用 allow 和 deny 指令限制访问来源,只允许可信子网(如 10.10.0.0/16)或特定运维出口 IP 访问 API 路径。
注意:若 Nginx 前有负载均衡或云网关,需开启 real_ip_module 并设置 set_real_ip_from,确保 $remote_addr 解析为真实客户端 IP,而非上一跳地址。
- 配置 real_ip_recursive on;
- 在 location 中添加 allow/deny 顺序执行(deny all 必须放在最后);
- 搭配 return 403 可自定义拒绝响应体。
基础速率限制与突发流量兜底
用 limit_req_zone 定义限流维度(如按 $binary_remote_addr 或 $http_authorization),再在 location 中应用。对内部服务,建议按调用方标识(如 App-ID 请求头)区分配额,比单纯限 IP 更合理。
关键参数说明:
- rate=10r/s:每秒基准请求数;
- bust=20:允许最多积压 20 个请求进队列;
- nodelay:不延迟响应,超限直接 503,适合强实时性场景。
可结合 limit_conn_zone 防止单个 IP 建立过多连接,避免慢速攻击耗尽资源。
敏感路径隐藏与请求规范化
禁用调试接口(如 /actuator、/admin、/swagger)对外暴露,用 location ~ ^/(actuator|admin|swagger) { return 404; } 直接拦截。
对请求做标准化处理:
- 统一去除多余空格或换行(用 map + proxy_set_header);
- 强制要求 Content-Type 为 application/json(配合 if 判断并 return 400);
- 重写请求路径,剥离版本前缀(如 /v2/api/users → /api/users),降低后端适配成本。


















