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/foohttp://192.168.140.10:9000/test/foo
  • 正则 location (~):后端地址不能再带路径,否则路径匹配会混乱
    • page icon
      只支持http协议

🔹 传递真实客户端 IP

后端日志格式需修改为:
Apache:
nginx:
✅ 推荐完整写法:

二、负载均衡(upstream 模块)

🔹 作用

  • 把请求分发到多个后端服务器
  • 提升整体并发能力和可用性

🔹 常见调度算法

  • 轮询 (round-robin, 默认)
    • 请求依次分配
    • 可设置权重 weight
    • ✅ 简单高效
    • ❌ 会话不固定(可能导致用户掉线)
      • 可以使用第三方中间件 redis 来完成共享问题
        会话持久问题,利用NoSQL做会话共享
  • ip_hash
    • 根据客户端 IP 分配固定服务器
      • 例如A用户访问服务器,通过固定算法后,被固定到 192.168.136.136 的web服务器上,那么,用户A下次访问时,依旧会到访问 192.168.136.136 服务器。
    • ✅ 可保持会话一致性
    • ❌ 可能出现负载不均衡(部分 IP 集中)
  • 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...