[Nginx]反向代理和负载均衡

目录

反向代理

反向代理的配置

负载均衡

负载均衡的配置

负载均衡的策略

总结

反向代理

访问某个网站时,前端接口和后端接口不是一样

这是Nginx反向代理的功能,将前端发送的动态请求发送到后端服务器,后端服务器处理完请求,将响应返回给反向代理,反向代理再将响应返回给客户端。​​客户端并不知道请求具体是由哪个后端服务器处理的,以为就是反向代理在处理请求。​

这样做最主要的好处有三个:

  1. 隐藏后端服务器:​ 保护真正的应用服务器免受直接的外部攻击。
  2. 负载均衡:​ 作为负载均衡器的基础。
  3. 提高访问速度

反向代理的配置

在nginx.conf文件中配置

复制代码
server {
    listen 80; # 监听端口 80 (HTTP)
    server_name example.com; # 负责响应对 example.com 的请求

    location / {
        # 将匹配 / 路径的所有请求转发给后端服务器组 `backend_servers`
        proxy_pass http://backend_servers; 
    }
}

# 定义后端服务器集群
upstream backend_servers {
    server 服务器1地址:端口; # 后端应用服务器1地址和端口
    server 服务器2地址:端口; # 后端应用服务器2地址和端口
}

负载均衡

  • 是什么:​ 是​Nginx 反向代理功能的一个扩展和核心应用场景。指 Nginx 将接收到的客户端请求,按照某种预定义的策略,分发到多个后端服务器上进行处理的过程。
  • ​目的:​ ​分摊负载、提高并发处理能力、提升系统整体性能和可用性。​ 当一台后端服务器故障时,Nginx可以将请求转发给其他健康的服务器。

负载均衡的配置

其实跟反向代理基本一样

复制代码
upstream backend_pool { # 定义一个后端服务器池,名为 backend_pool
    # 定义服务器,地址:端口(可选权重和其他参数)
    server backend1.example.com weight=3;  # 权重为 3
    server backend2.example.com:8080;       # 权重默认为 1
    server 192.168.100.103 backup;         # 备份服务器,当主服务器宕机后才启用
    # 可以配置其他负载均衡算法和参数
    # least_conn; # 如果指定为最少连接算法
}

server {
    listen 80;
    server_name myapp.com;

    location / {
        proxy_pass http://backend_pool; # 将请求代理转发到上面定义的 backend_pool 池
        # ... 其他反向代理相关配置(如proxy_set_header)...
    }
}

负载均衡的策略

  • 轮询:​ 默认策略。依次将新请求分发到池中的每个后端服务器。配合 weight 参数可以实现​加权轮询​ (权重高的服务器承担更多请求)。
    • 示例: server backend1 weight=5; server backend2; (backend1 处理大约 5/6 的请求,backend2 处理 1/6)。
  • ​最少连接:​ 将请求发送到当前​活动连接数最少​ 的后端服务器。需要配置 least_conn;。
    • 场景: 当后端服务器处理请求能力差异较大或请求耗时长短不一时更公平。
  • ​IP 哈希:​ 根据客户端 IP 地址计算哈希值,将同一客户端的请求​固定​ 转发给某个后端服务器(除非该服务器不可用)。需要配置 ip_hash;。
    • 场景: 需要维护用户会话状态(Session)的应用,避免了 Session 同步的复杂性。但其固定分配特性可能不够均衡。
  • ​URL 哈希:​ 根据请求的 URL 计算哈希值进行分配。使用第三方模块(如 ngx_http_upstream_hash_module)或商业版支持。

总结

Nginx 反向代理​ ​是让 Nginx 作为一个中介,代表后端服务器接收并处理客户端请求。核心配置在 proxy_pass。

​Nginx 负载均衡​ ​是反向代理的自然延伸和应用,当反向代理目标指向一组服务器(upstream)时,Nginx 负责按照特定策略将新请求分配给组内不同的服务器,以达到提高性能和高可用的目的。

相关推荐
Ruiery10 小时前
Linux 6.6内核内存管理深度解析(十三):slab/slub 分配器
linux·运维·服务器
Decay__11 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
江华森13 小时前
数据中心基础设施运维实战:概述与实验环境搭建
运维
迪菲赫尔曼13 小时前
【基础篇 11】把官方源码放到服务器:版本、解压层级和安装位置,一次弄清楚
运维·服务器·开发语言·人工智能·python·yolo·目标检测
by2099914 小时前
Linux GCC/G++ 编译与 Makefile 构建
linux·运维·服务器·经验分享
螺丝钉tina14 小时前
[Playwright][08] Upload 模块自动化:如何设计真实业务测试用例?
运维·自动化·测试用例
迪菲赫尔曼15 小时前
【基础篇 12】把环境与源码接起来:检查 GPU,再安装服务器上的项目
运维·服务器·开发语言·人工智能·python·yolo·目标检测
cq林志炫15 小时前
两个Linux服务器之间同步文件
linux·运维·服务器
yyuuuzz15 小时前
云服务器安全组规则优先级的机制记录
运维·服务器·网络·安全·阿里云·aws
KaiwuDB15 小时前
KaiwuDB 运维实战06:数据库备份与恢复:从理论到实战
运维·数据库·时序数据库·kaiwudb