当前位置: 首页 > news >正文

正向代理,反向代理,负载均衡还有nginx

这是一个非常核心且重要的后端/运维知识领域。我会用尽可能清晰易懂的方式,结合生动的比喻,为你详细梳理这些概念。


核心概念一览

我们先从一个宏观的角度来理解它们之间的关系:

  • 代理(Proxy): 一个中间人的角色。你不直接联系目标,而是通过这个中间人。

  • 正向代理(Forward Proxy): 代理客户端。它站在客户端(用户)这边,替客户端去访问外部资源。核心关键词:为客户端服务、科学上网、缓存、隐藏客户端。

  • 反向代理(Reverse Proxy): 代理服务端。它站在服务器这边,替服务器接收来自外部客户的请求。核心关键词:为服务端服务、负载均衡、安全、隐藏后端服务器。

  • 负载均衡(Load Balancing): 一种技术/策略,通常由反向代理来实现。它的目标是把大量的请求合理地(均匀地、按权重等)“分配”给后台多个服务器,防止单个服务器过载。

  • Nginx: 一个非常流行的、高性能的软件,它同时实现了反向代理负载均衡Web服务器缓存等多种功能。它是这些概念的一个优秀实践者

下面我们来逐个击破。


1. 正向代理 (Forward Proxy) - “客户的代言人”

是什么?

正向代理是位于客户端(比如你的浏览器)和目标服务器(比如 Google)之间的一个服务器。客户端会明确地配置并连接到这个代理服务器,然后由代理服务器去获取你想要的信息,再返回给你。

生动的比喻:科学上网工具(VPN/代理)

你想访问 Google(目标服务器),但你的网络无法直接访问(因为有墙)。于是你在电脑上设置了一个科学上网工具(正向代理)。

  1. 你的浏览器请求发给科学上网工具:“帮我去拿 Google 首页。”

  2. 科学上网工具用自己的身份去访问 Google,拿到首页。

  3. 科学上网工具把首页内容返回给你的浏览器。

对你(客户端)来说,你感知到的是科学上网工具给了你Google的内容。对Google(服务器)来说,它只知道是科学上网工具来访问了它,并不知道你的存在。

核心作用与特点:
  1. 突破访问限制: 访问无法直接到达的资源(如上面的例子)。

  2. 隐藏客户端身份: 目标服务器看不到客户端的真实IP,保护隐私。

  3. 缓存加速: 如果公司内网很多人访问同一个网站,代理服务器可以把内容缓存下来,下次其他人访问时直接从缓存里取,加快速度并节省带宽。

  4. 访问控制: 公司网络可以通过代理监控和限制员工上网行为。

工作流程:

text

[ 客户端 ] --> (我知道我要通过它) --> [ 正向代理 ] --> [ 目标服务器 ]

2. 反向代理 (Reverse Proxy) - “公司的前台/总机”

是什么?

反向代理是位于一个或多个服务器前面的一个服务器。客户端(用户)直接访问反向代理,然后由反向代理将请求转发到内部网络上的某台服务器,并将得到的结果返回给客户端。

客户端并不知道后面有哪些服务器,也不关心请求具体被谁处理了。它以为反向代理就是最终的服务器。

生动的比喻:酒店前台

一个大型酒店有很多服务员(后端服务器),但你作为客人(客户端)不会直接联系某个服务员。

  1. 你走到酒店前台(反向代理)说:“我要开间房。”

  2. 前台根据当前哪个服务员空闲、哪个区域忙等策略(负载均衡),通过对讲机让服务员A去处理你的请求。

  3. 服务员A办好手续,把房卡给前台,前台再交给你。

对你(客户端)来说,你是在和前台打交道,你不知道背后是服务员A还是B为你服务的。对服务员(后端服务器)来说,他们被前台保护起来,不会直接面对客户的各种冲击。

核心作用与特点:
  1. 隐藏服务器身份: 保护后端服务器的安全,暴露给公网的只有反向代理,有效防止直接攻击。

  2. 负载均衡: 这是反向代理最核心的功能之一(下面详细讲)。

  3. SSL 加密/解密: 可以由反向代理统一处理耗性能的HTTPS加密解密,减轻后端服务器压力。

  4. 缓存静态内容: 将图片、CSS、JS等静态文件缓存起来,直接返回,无需请求后端。

  5. 压缩: 压缩响应内容,减少传输时间。

  6. 统一入口: 微服务架构中,反向代理可以作为API网关,统一接收所有请求。

工作流程:

text

[ 客户端 ] --> [ 反向代理 ] --> (它来决定给谁) --> [ 服务器A ]|+---------> [ 服务器B ]|+---------> [ 服务器C ]

3. 负载均衡 (Load Balancing) - “聪明的调度员”

是什么?

负载均衡是反向代理扮演的一个核心角色。它是一种技术,旨在将网络流量或计算任务分布式到多个服务器上,以确保没有任何单个服务器因过载而性能下降或宕机。它提高了整个系统的可用性、可靠性和吞吐量。

如何工作?(调度算法)

负载均衡器(即反向代理)通过不同的算法来决定将新请求发给哪台后端服务器(这些服务器集群也称为“服务器池”或“农场”):

  • 轮询 (Round Robin): 依次分发,第1个请求给服务器A,第2个给服务器B,第3个给服务器C,第4个又给回A...如此循环。最简单公平。

  • 加权轮询 (Weighted Round Robin): 给性能好的服务器更高的权重,它就能处理更多的请求。比如服务器A(权重3),服务器B(权重1),那么分发模式可能是 A->A->A->B->A->A->A->B。

  • 最少连接数 (Least Connections): 优先将新请求发给当前连接数最少的服务器,非常高效。

  • IP 哈希 (IP Hash): 根据客户端的IP地址计算一个哈希值,总是将同一个IP的请求发给同一台服务器。这能保证会话(Session)一致性,比如用户的购物车信息只存在一台服务器上。


4. Nginx - “瑞士军刀”

是什么?

Nginx (发音为 “engine-x”) 是一个开源、高性能、高可靠性的 HTTP 和反向代理服务器。它因其强大的功能、低内存消耗和高并发处理能力而闻名。

它扮演什么角色?

Nginx 完美地集成了我们上面讨论的所有概念:

  1. 作为 Web 服务器: 像 Apache 一样,可以直接托管网站文件(HTML, CSS, JS, 图片)。

  2. 作为反向代理: 这是它最常用的核心功能。接收客户端请求,转发给后端的Tomcat, Apache, Node.js, Python Django等应用服务器。

  3. 作为负载均衡器: 在反向代理的基础上,通过简单的配置即可实现上述的各种负载均衡算法。

  4. 其他功能: 还能做缓存、SSL终结、流量限制、访问控制等。

一个简单的 Nginx 负载均衡配置示例

假设你有三台后端应用服务器,IP分别是 192.168.1.10192.168.1.11192.168.1.12

你的 Nginx 配置文件 (nginx.conf) 中可能会这样写:

nginx

http {# 定义一个名为 "backend_servers" 的服务器组upstream backend_servers {# 使用默认的轮询算法server 192.168.1.10;    # 服务器Aserver 192.168.1.11;    # 服务器Bserver 192.168.1.12;    # 服务器C# 如果要使用加权轮询# server 192.168.1.10 weight=3;# server 192.168.1.11 weight=1;}server {listen 80; # Nginx 监听80端口location / {# 将所有对根路径的请求代理到上面定义的服务器组proxy_pass http://backend_servers;# 以下是一些常见的反向代理设置,确保正确传递客户端信息proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}
}

这样,当用户访问你的域名时,Nginx(反向代理+负载均衡器)就会按照配置的算法,将请求轮流发给后端的三个服务器。


总结与对比

特性正向代理反向代理
代理对象代理客户端代理服务端
客户端知情吗?知情,需要主动配置代理地址不知情,以为反向代理就是真实服务器
部署位置靠近客户端(如在客户端局域网内)靠近服务端(如在数据中心入口)
主要目的为客户端服务:突破限制、缓存、隐藏身份为服务端服务:负载均衡、安全、缓存、加密
典型例子VPN、科学上网工具、企业上网代理Nginx、Apache Traffic Server、CDN

负载均衡是反向代理的核心功能之一,Nginx 则是实现反向代理和负载均衡的著名软件。


文章转载自:

http://GZo5m9KS.sgrdp.cn
http://8Izmg9UK.sgrdp.cn
http://2bPKcRs4.sgrdp.cn
http://dqjIV2mH.sgrdp.cn
http://PX37Z4mr.sgrdp.cn
http://NbMwMWGA.sgrdp.cn
http://Biq50apj.sgrdp.cn
http://lRxBQCW2.sgrdp.cn
http://c6nUr7kx.sgrdp.cn
http://3ZXP3az9.sgrdp.cn
http://sA83T49o.sgrdp.cn
http://sRXZP4yC.sgrdp.cn
http://3SlmqRh9.sgrdp.cn
http://iBO9AUKy.sgrdp.cn
http://d0tAbm5b.sgrdp.cn
http://9AUSZgXi.sgrdp.cn
http://YfaUdoq6.sgrdp.cn
http://E2qvwCo6.sgrdp.cn
http://JoHzdgaU.sgrdp.cn
http://UJqmMdiW.sgrdp.cn
http://zYdrhmxh.sgrdp.cn
http://7YUDdVpq.sgrdp.cn
http://oRw1Rf6r.sgrdp.cn
http://yIVWrqbe.sgrdp.cn
http://wKuhPxac.sgrdp.cn
http://NJKgvMj7.sgrdp.cn
http://QyE1Z9jA.sgrdp.cn
http://HoieoVkj.sgrdp.cn
http://kLEXuxgO.sgrdp.cn
http://9OXQli25.sgrdp.cn
http://www.dtcms.com/a/374733.html

相关文章:

  • 用户态与内核态的深度解析:安全、效率与优化之道
  • 搭建本地gitea服务器
  • ArcGIS JSAPI 高级教程 - 倾斜摄影数据开启透明(修改源码)
  • 输电线路分布式故障监测装置技术解析
  • 概率论第四讲—随机变量的数字特征
  • 学习stm32 蓝牙
  • 数据库学习MySQL系列2、Windows11系统安装MySQL方法一.msi安装详细教程
  • STM32物联网项目---ESP8266微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制---代码篇(四)
  • 北京鲁成伟业 | 三屏加固笔记本电脑C156F3
  • 从0~1搭建技术团队的思路
  • 如何在 Unity3D 中实现圆角效果?
  • LeetCode 面试经典 150 题:多数元素(摩尔投票法详解 + 多解法对比)
  • CStringArray 和 CStringList
  • 银行业安全用电系统建设与智能化管理探析
  • 20250909_排查10.1.1.190档案库房综合管理系统20250908备份缺失问题+优化scp脚本(把失败原因记录进日志)并测试脚本执行情况
  • 硬件开发_基于STM32单片机的海鲜冷藏车检测系统
  • AI一周事件(2025年9月3日-9月8日)
  • Unity3D发布的文件打包成Windows安装程序
  • 已知两个平面点的坐标、切线方向、曲率,使用牛顿迭代法构造三阶 Bézier 曲线的方法
  • 全球工业互联网大会 | 蓝卓supOS以数据底座,筑牢工业AI基石
  • k8s交互桥梁:走进Client-Go
  • K8S-Node
  • 嵌入式 - ARM(4) 硬件介绍与开发环境搭建
  • 网络上那些在线 PDF 转换工具安全吗?转换 PDF 需要注意什么
  • OneMark 插件试用
  • 专题:2025人形机器人、工业机器人、智能焊接机器人、扫地机器人产业洞察报告 | 附158+份报告PDF、数据仪表盘汇总下载
  • 微服务核心组件实战:Nacos 与 Ribbon 的应用
  • PDF处理控件Aspose.PDF教程:使用 Python 将 PDF 转换为 Base64
  • arm启动代码总结
  • TypeScript学习【一】