Nginx 反向代理与负载均衡
type
status
date
slug
summary
tags
category
icon
password
一、反向代理(proxy 模块)
🔹 作用
- 提高后端性能和并发能力(Nginx 复用连接)
- 隐藏后端真实 IP,增强安全性
🔹 基本语法
示例:
访问
/kr → 转发到 http://192.168.140.10:9000/project🔹 URI 拼接规则
- 没有尾随 URI:会把
location的路径拼接到后端地址
/test/foo → http://192.168.140.10:9000/test/foo- 正则 location (~):后端地址不能再带路径,否则路径匹配会混乱
只支持http协议
🔹 传递真实客户端 IP
后端日志格式需修改为:
Apache:
nginx:
✅ 推荐完整写法:
二、负载均衡(upstream 模块)
🔹 作用
- 把请求分发到多个后端服务器
- 提升整体并发能力和可用性
🔹 常见调度算法
- 轮询 (round-robin, 默认)
- 请求依次分配
- 可设置权重
weight - ✅ 简单高效
- ❌ 会话不固定(可能导致用户掉线)
可以使用第三方中间件 redis 来完成共享问题
会话持久问题,利用NoSQL做会话共享
- ip_hash
- 根据客户端 IP 分配固定服务器
- ✅ 可保持会话一致性
- ❌ 可能出现负载不均衡(部分 IP 集中)
例如A用户访问服务器,通过固定算法后,被固定到 192.168.136.136 的web服务器上,那么,用户A下次访问时,依旧会到访问 192.168.136.136 服务器。
- least_conn
- 请求分配到连接数最少的服务器
- ✅ 更适合长连接、耗时请求的场景
三、配置示例
📌 补充说明
weight:权重(数字越大,分配请求越多)
backup:备用服务器,只有主服务器都挂了才启用
proxy_set_header:建议加上 Host、X-Real-IP、X-Forwarded-For 三件套
四、故障转移与稳定性
max_fails- 最大失败次数(默认 1 次)
fail_timeout- 多长时间内失败超过
max_fails→ 判定该服务器不可用
backup- 备用服务器,保证在主节点都挂掉时仍能服务
⚠️ 注意:
fail_timeout到期后会尝试恢复
- 这是 被动健康检查(依赖请求结果)
- 若要主动健康检查,需要用 nginx-plus 或第三方模块(如
nginx_upstream_check_module)
五、总结速查表
功能 | 配置/说明 |
反向代理 | location / { proxy_pass http://... } |
URI 拼接规则 | 无 URI → 拼接路径;正则匹配禁止带路径 |
客户端 IP | proxy_set_header X-Real-IP $remote_addr; |
负载均衡算法 | rr(默认轮询)、ip_hash(固定 IP)、least_conn(最少连接) |
健康检查 | max_fails + fail_timeout |
备份服务器 | server … backup |
六、补充建议
- 会话一致性
- 小规模可用
ip_hash - 大规模建议使用 Redis / 数据库存储 session
- 日志追踪
- 统一记录
X-Forwarded-For
- 生产环境实践
- 常用请求头三件套:
Loading...