Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Nginx 经典问题

Redis 的问题核心是“缓存一致性与失效”

Nginx 的问题核心是“流量、连接、代理与边界失控”

一、Nginx 的「三大经典问题模型」(类比 Redis)

① 连接耗尽 / FD 耗尽(Nginx 版“雪崩”)

表现

  • 大量 502 / 504
  • error.log 出现:
worker_connections are not enough
too many open files
  • 新请求无法建立连接

根因

  • worker_connections 太小
  • ulimit -n 太小
  • 后端连接未复用(keepalive 未开)
  • TIME_WAIT 堆积
  • 大量慢连接(慢 POST、慢客户端)

本质

连接资源被瞬间耗尽,整个入口失效

对应 Redis

👉 缓存雪崩

解决

  • worker_connections + ulimit 调大
  • upstream keepalive
  • aggressive timeout
  • 限流
  • 防慢连接

② 后端被打爆(Nginx 版“击穿”)

表现

  • Nginx 正常
  • 后端 CPU 100%
  • 接口响应越来越慢
  • 逐渐 504

根因

  • Nginx 没有缓存
  • 热点接口被瞬间放大
  • proxy_buffering 关闭
  • 无重试 / 熔断

本质

所有请求同时打到后端单点

对应 Redis

👉 缓存击穿

解决

  • proxy_cache
  • limit_req
  • proxy_next_upstream
  • 熔断 / 降级
  • upstream least_conn

③ 请求被无限放大(Nginx 版“穿透”)

表现

  • 大量 404 / 400
  • 后端 QPS 很高但无有效业务
  • 日志暴涨

根因

  • 对不存在资源无限转发
  • 未缓存 404
  • 未做路径 / 方法限制
  • 爬虫 / 扫描器

本质

无效请求穿透到后端

对应 Redis

👉 缓存穿透

解决

  • try_files
  • proxy_cache 404
  • deny 非法路径
  • limit_req
  • 白名单 API

二、再往下:Nginx「系统性问题大全」

下面这些是生产环境真正在出事的点。

4️⃣ 慢连接 / 慢请求(Silent Killer)

现象

  • QPS 不高
  • 连接数很高
  • worker 占满
  • CPU 不高但服务卡死

原因

  • client_body_timeout 太大
  • proxy_read_timeout 太大
  • 慢客户端持续占用连接

本质

worker 被“慢 IO”拖死

解决

  • 短 connect timeout
  • 限制上传速率
  • 限制 body size
  • limit_conn

5️⃣ 路径错乱(反向代理经典坑)

现象

  • 404 / 302 循环
  • Jenkins / GitLab 提示 proxy broken

原因

  • proxy_pass 带 / 不带 /
  • location 与 prefix 不一致
  • proxy_redirect 缺失

本质

URI 重写规则理解错误

6️⃣ 真实 IP 丢失 / 伪造

现象

  • 后端全是 127.0.0.1
  • 风控失效
  • 日志无法定位用户

原因

  • X-Forwarded-For 没配置
  • real_ip 模块没开
  • 盲信客户端 XFF

本质

信任边界没划清

7️⃣ TLS / HTTP2 带来的隐性压力

现象

  • HTTPS 比 HTTP 慢很多
  • CPU 被 TLS 吃满

原因

  • TLS 握手多
  • session cache 没开
  • HTTP/2 未启用

解决

  • TLS session cache
  • HTTP/2
  • HSTS 稳定后再开

8️⃣ 日志 I/O 放大

现象

  • 磁盘 IO 100%
  • access.log 巨大

原因

  • 全量记录日志
  • 高并发下同步写盘

本质

日志成为性能瓶颈

9️⃣ 配置错误导致单点失效

现象

  • reload 后直接 502
  • 某个 server block 抢占默认端口

原因

  • server_name 冲突
  • default_server 误用
  • upstream 名称冲突

🔟 边界职责混乱(架构级问题)

现象

  • Nginx 做了太多业务逻辑
  • Lua 过重
  • 配置复杂难维护

本质

把 Nginx 当应用服务器用

三、总结成一张「对比表」

Redis 问题 Nginx 对应问题 本质
缓存穿透 无效请求穿透 边界缺失
缓存击穿 热点流量打爆后端 缺乏缓冲
缓存雪崩 连接 / FD 耗尽 资源枯竭

四、其它

Redis 主要面临缓存一致性与失效问题,而 Nginx 作为流量入口,更容易出现连接耗尽、请求放大、后端被打爆等问题。

在生产中,我们通常通过限流、缓存、超时控制、负载均衡和连接复用来防止这些问题,本质是控制流量、隔离故障、保护后端。