1. 反向代理与Nginx基础认知
第一次接触Nginx反向代理是在2013年负责一个高并发Web项目时。当时单台Tomcat服务器在300QPS时响应时间就开始飙升,而Nginx的upstream模块让我们轻松实现了负载均衡,将性能提升了一个数量级。反向代理(Reverse Proxy)作为现代Web架构的基石,其核心价值在于:对外隐藏真实服务器拓扑,对内实现流量调度和负载均衡。
Nginx作为反向代理的王者,其upstream模块提供了丰富的负载均衡算法和健康检查机制。与Apache的mod_proxy相比,Nginx的事件驱动架构使其在处理大量并发连接时内存占用极低。实测数据显示,在4核8G的服务器上,Nginx可以轻松应对10万级别的并发连接,而内存消耗仅维持在100MB左右。
关键认知误区:很多人认为反向代理只是简单的请求转发,实际上它涉及连接池管理、健康检查、失败重试等复杂机制。比如当后端服务器响应超时,Nginx会自动标记该节点为不可用并尝试其他节点,这个过程对客户端完全透明。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. upstream模块深度解析
2.1 核心配置参数详解
upstream块的基础语法看似简单,但每个参数都暗藏玄机:
nginx复制upstream backend {
server 192.168.1.100:8080 weight=5 max_fails=3 fail_timeout=30s;
server 192.168.1.101:8080 slow_start=30s;
keepalive 32;
least_conn;
}
- weight:权重分配不是简单的概率计算。实际算法是:当前节点权重/集群总权重 × 100%。上述配置中第一个节点获得5/6≈83.3%的流量
- max_fails & fail_timeout:连续失败3次后,节点被隔离30秒。但很多人不知道这个计数是基于per-worker的,不同worker进程的失败计数独立计算
- slow_start:新节点加入集群时,权重从0线性增长到设定值,避免冷启动被流量打垮
- keepalive:维持到后端的长连接数,这个数字不是越大越好。建议公式:worker_processes × worker_connections / upstream服务器数量
2.2 负载均衡算法实战选择
Nginx提供多种负载均衡策略,选择取决于业务场景:
| 算法类型 | 配置指令 | 适用场景 | 注意事项 |
|---|---|---|---|
| 轮询(默认) | (默认) | 各服务器性能相近的通用场景 | 可能导致会话不连续 |
| 加权轮询 | weight | 服务器配置差异大的异构环境 | 动态扩容需重新计算权重 |
| 最少连接数 | least_conn | 长连接服务如WebSocket、数据库代理 | 需要开启keepalive才有意义 |
| IP哈希 | ip_has |
