Yang's blog Yang's blog
首页
后端开发
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

xiaoyang

尽人事,听天命
首页
后端开发
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • SpringCloud

    • 微服务架构介绍
    • SpringCloud介绍
    • Spring Cloud:生产者与消费者
    • Spring Cloud Eureka:构建可靠的服务注册与发现
    • Spring Cloud Ribbon:负载均衡
    • Spring Cloud Fegin:服务调用
    • Spring Cloud Hystrix:熔断器
    • Spring Cloud Zuul:统一网关路由
    • Spring Cloud Config:配置中心
  • Java后端框架

    • LangChain4j

      • 介绍
      • 快速开始
      • Chat and Language Models
      • Chat Memory
      • Model Parameters
      • Response Streaming
      • AI Services
      • Agent
      • Tools (Function Calling)
      • RAG
      • Structured Outputs
      • Classification
      • Embedding (Vector) Stores
      • Image Models
      • Quarkus Integration
      • Spring Boot Integration
      • Kotlin Support
      • Logging
      • Observability
      • Testing and Evaluation
      • Model Context Protocol
  • 八股文

    • 操作系统
    • JVM介绍
    • Java多线程
    • Java集合框架
    • Java反射
    • JavaIO
    • Mybatis介绍
    • Spring介绍
    • SpringBoot介绍
    • Mysql
    • Redis
    • 数据结构
    • 云计算
    • 设计模式
    • 计算机网络
    • 锁核心类AQS
    • Nginx
  • 前端技术

    • 初识Vue3
    • Vue3数据双向绑定
    • Vue3生命周期
    • Vue-Router 组件
    • Pinia 集中式状态存储
  • 中间件

    • RocketMQ
  • 开发知识

    • 请求参数注解
    • 时间复杂度和空间复杂度
    • JSON序列化与反序列化
    • Timestamp vs Datetime
    • Java开发中必备能力单元测试
    • 正向代理和反向代理
      • 什么是反向代理(Reverse Proxy)?
        • 代理服务器是什么?
        • 为什么要在互联网活动中增加这个“中介”?
      • 反向代理与正向代理的区别
        • 反向代理的工作流程
        • 反向代理的好处
        • 如何实现反向代理?
      • 总结
    • 什么是VPN
    • 后端服务端主动推送消息的常见方式
    • 正则表达式
    • SseEmitter vs Flux 的本质区别与底层原理解析
  • 后端开发
  • 开发知识
xiaoyang
2024-11-06
目录

正向代理和反向代理

# 正向代理与反向代理

# 什么是反向代理(Reverse Proxy)?

反向代理是一个位于 Web 服务器前端的服务器,负责将客户端(例如 web 浏览器)的请求转发到那些 Web 服务器。反向代理通常用于增强安全性、性能和可靠性。为了更好地理解反向代理的工作原理及其带来的好处,我们首先需要定义什么是代理服务器。

# 代理服务器是什么?

正向代理(Forward Proxy),也称为代理服务器或 Web 代理,是位于一组客户端机器前端的服务器。当这些计算机向互联网上的网站和服务发出请求时,代理服务器会拦截这些请求,并代表这些客户端与 Web 服务器进行通信,就像是一个中介。

举个例子,假设有三台计算机参与了一个典型的正向代理通信:

  • A:用户的家用计算机
  • B:正向代理服务器
  • C:网站的源服务器(存储网站数据的地方)

image-20241106113858627

正向代理流程:流量从用户的设备(A)流向正向代理(B),然后通过互联网传输到源服务器(C)。

在标准的互联网通信中,计算机 A 会直接访问计算机 C,客户端向源服务器发送请求,源服务器将响应返回给客户端。当使用正向代理时,A 会将请求发送给 B,然后由 B 将请求转发给 C。C 会将响应发送回 B,再由 B 将响应传回 A。

# 为什么要在互联网活动中增加这个“中介”?

使用正向代理有几种原因:

  • 绕过政府或机构的浏览限制:一些政府、学校和其他机构通过防火墙对用户访问互联网的内容进行限制。正向代理可以帮助用户绕过这些限制,允许他们通过代理服务器连接,而不是直接访问他们访问的网站。
  • 阻止访问某些内容:相反,代理也可以用来阻止某些用户访问特定网站。例如,学校的网络可以配置为通过代理连接到互联网,并启用内容过滤规则,阻止访问 Facebook 或其他社交媒体网站。
  • 保护在线身份:在某些情况下,普通互联网用户只是希望增加匿名性,然而在其他情况下,互联网用户生活在政府可能对政治异见者实施严厉惩罚的地方。通过使用正向代理,用户的真实 IP 地址会被隐藏,从而保护其隐私和安全。

# 反向代理与正向代理的区别

反向代理是一个位于一个或多个 Web 服务器前端的服务器,拦截来自客户端的请求。这与正向代理不同,后者是位于客户端前端。使用反向代理时,客户端向网站的源服务器发送请求时,这些请求会在网络边缘被反向代理服务器拦截,然后由反向代理服务器将请求发送到源服务器,并接收来自源服务器的响应。

正向代理和反向代理的区别微妙但重要。简单来说,正向代理位于客户端前端,确保源服务器永远不会直接与特定客户端通信;而反向代理位于源服务器前端,确保客户端永远不会直接与源服务器通信。

# 反向代理的工作流程

让我们通过以下三台计算机来说明反向代理的工作流程:

  • D:任意数量的用户家用计算机
  • E:反向代理服务器
  • F:一个或多个源服务器

image-20241106113927453

反向代理流程:流量从用户设备(D)流向互联网,再流向反向代理(E),最后到达源服务器(F)。

通常,D 的所有请求会直接发送到 F,F 会直接回应 D。而使用反向代理后,所有来自 D 的请求会首先发送到 E,由 E 再转发给 F,F 的响应再由 E 转发给 D。

# 反向代理的好处

  1. 负载均衡
    一个流量巨大的热门网站可能无法仅依靠单台源服务器处理所有的流量。此时,网站可以将流量分配到多个服务器上,每个服务器都处理同一个站点的请求。反向代理可以提供负载均衡解决方案,平衡多个服务器之间的流量,防止某一台服务器超载。当某台服务器完全失效时,其他服务器可以接管流量。

  2. 防止攻击
    使用反向代理后,网站或服务无需暴露其源服务器的 IP 地址,这使得攻击者很难对其进行定向攻击,如 DDoS 攻击。攻击者只能攻击反向代理服务器(例如 Cloudflare CDN),而反向代理具有更强的安全防护能力,能够更好地抵御网络攻击。

  3. 全球服务器负载均衡(GSLB)
    在全球负载均衡中,网站可以将多个服务器分布在全球各地,反向代理会将客户端请求路由到离其地理位置最近的服务器,从而减少请求和响应所需的距离,最小化加载时间。

  4. 内容缓存
    反向代理也可以缓存内容,从而提升性能。例如,如果位于巴黎的用户访问一个位于洛杉矶的反向代理网站,该用户实际上可能会连接到巴黎本地的反向代理服务器,反向代理将与洛杉矶的源服务器进行通信。然后,反向代理服务器可以缓存(或临时保存)响应数据,接下来访问该站点的巴黎用户将直接从本地缓存中获取内容,从而实现更快的访问速度。

  5. SSL 加密
    对每个客户端进行 SSL(或 TLS)加密和解密操作对于源服务器来说是资源密集型的。反向代理可以配置为解密所有进入的请求,并对所有离开的响应进行加密,这样可以释放源服务器的宝贵资源。

# 如何实现反向代理?

一些公司会自行构建反向代理,但这需要大量的软件和硬件工程资源,并且在硬件方面也需要较大的投资。实现反向代理的最简单且最具成本效益的方法之一是通过 CDN 服务。例如,Cloudflare CDN 提供了上述所有性能和安全功能,并且还有更多其他功能可供选择。

# 总结

使用正向代理上网、访问受限制的内容、进行网络抓取等,对确保隐私和安全至关重要。而反向代理对每天访问量很大的网站十分重要,因为它们有助于避免过载,并且非常适合缓存内容、SSL 加密。

编辑 (opens new window)
上次更新: 2025/05/12, 03:06:46

← Java开发中必备能力单元测试 什么是VPN→

最近更新
01
SseEmitter vs Flux 的本质区别与底层原理解析
05-12
02
操作系统
03-18
03
Nginx
03-17
更多文章>
Theme by Vdoing | Copyright © 2023-2025 xiaoyang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式