正向代理和反向代理

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 本文详细介绍了代理和反向代理的概念及应用场景。代理作为一种中间人服务,可细分为正向代理与反向代理。前者位于客户端与网络间,有助于匿名浏览、访问控制、缓存加速及增强安全性;后者则位于网络与服务器间,主要用于负载均衡、缓存、安全性提升、SSL终止及内容过滤等。两者各有侧重,可根据具体需求选择使用。例如,Squid 是常用的正向代理框架,而 Nginx 则常用于反向代理。了解并合理运用两者,能有效提升网络性能与安全性。

Hi,你好,我是猿java。

在日常工作中,我们经常会听到代理和反向代理这两个词,那么,什么是代理?什么又是反向代理?为什么有了代理还需要反向代理?他们之间有什么差异?今天我们就来一起聊一聊。

定义

在计算机和网络领域,代理(proxy)通常是一种充当中间人的服务器或服务,用于转发客户端(通常是用户计算机)和目标服务器之间的请求和响应。它主要包括正向代理(forward proxy)和反向代理(reverse proxy)。

正向代理

在维基百科中,正向代理的定义是这样的:

正向代理:Forward Proxy,也称网络代理,就是我们通常说的代理,它是一种特殊的网络服务,允许一个终端(一般为客户端)通过这个服务与另一个终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,在一定程度上能够阻止网络攻击。

正向代理的模型示意图如下:

proxy.png

从上图可以看出,正向代理位于客户端和网络之间,可以将客户端全部隐藏在代理后面。当客户端在发起网络请求时,不直接连接到目标服务器,而是将请求发送到正向代理服务器。正向代理服务器代表客户端向目标服务器请求数据,并将响应返回给客户端。客户端对目标服务器的身份和存在是不知情的,只与代理服务器进行通信。

正向代理的应用场景

匿名浏览

正向代理可以隐藏客户端的真实IP地址和身份,使目标服务器只能看到代理服务器的IP地址。这样,客户端可以在访问网站时保护自己的隐私和身份。

访问限制和绕过限制

通过代理,可以设置一些规则,防止客户端访问某些资源。相反,如果某些资源被限制,比如(防火墙),因此可以通过使用正向代理绕过这些限制,访问被屏蔽的内容或服务。

加速和缓存

正向代理服务器可以缓存目标服务器返回的内容。当多个客户端请求相同的资源时,代理服务器可以直接提供缓存的内容,减轻目标服务器的负载,并加快响应速度。

安全性增强

正向代理可以在客户端和目标服务器之间增加一个额外的安全层,可以过滤和阻止恶意请求、病毒、恶意软件等。

反向代理

在维基百科中,反向代理的定义是这样的:

反向代理(Reverse proxy)在电脑网络中是代理服务器的一种。服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的IP地址,而不知道在代理服务器后面的服务器集群的存在[1]。
下面我们通过客户端向服务器发起一个HTTP请求这个经典的流程来讲解API网关及其重要的功能。

反向代理的模型示意图如下:

reverse-proxy.png

从上图可以看出,反向代理位于网络和服务器之间,可以把服务器隐藏在反向代理后面。当客户端发起请求时,请求会发送到反向代理服务器,反向代理服务器代表目标服务器向客户端提供服务,并将客户端的请求转发到相应的目标服务器上。

反向代理的的应用场景

负载均衡

反向代理可以将客户端的请求分发给多个目标服务器,以平衡服务器负载。比如 Nginx,可以将用户的请求分发到后端到多个服务器。

缓存

反向代理可以缓存目标服务器返回的内容以及一些静态资源。当多个客户端请求相同的资源时,反向代理可以直接返回缓存的内容,减轻目标服务器的负载,并加快响应时间,提升API性能。

安全性

反向代理可以隐藏目标服务器 IP地址,可以过滤部分恶意请求、DDoS攻击等,并提供Web应用防火墙(WAF)功能,增强网络安全性。

SSL 终止

反向代理可以在代理服务器上终止传入的SSL连接,并将请求转发到目标服务器的非SSL连接上。这样,目标服务器就可以避免处理SSL握手的负担,提高性能。

单一入口

反向代理可以作为单一入口点,将来自多个目标服务器的内容汇聚在一个统一的URL下。这对于构建复杂的应用程序或多服务器架构非常有用。

内容过滤和修改

反向代理可以对请求和响应进行内容过滤和修改。例如,它可以对传入的请求进行访问控制、内容筛选,或者对返回的响应进行内容压缩和修改。

如何选择

正向代理的选择,更多的可以从下面的功能出发:

  • 隐私保护和匿名性
  • 访问控制和绕过限制
  • 缓存和加速
  • 安全增强

反向代理的选择,更多的可以从下面的功能出发:

  • 负载均衡
  • 安全性和隐藏目标服务器
  • SSL 终止
  • 缓存和加速

在实际应用中,正向代理和反向代理也可以结合使用,以发挥各自的优势。比如,某公司拥有多个位于不同地理位置的目标服务器,可以使用反向代理来实现负载均衡和高可用性。同时,为了提供隐私保护和访问控制,可以在客户端和目标服务器之间再添加一个正向代理层。

总结

本文分别分析正向代理和反向代理,正向代理更接近客户端,位于客户端和互联网之间,反向代理更接近服务器,位于互联网和服务器之间。

正向代理无法进行负载均衡和缓存资源优化,反向代理不能直接控制客户端的访问权限。

Squid是一款常见的开源正向代理框架,Nginx是一款常见的开源反向代理框架,同时 Nginx也可以做正向代理。现实工作中,还有很多框架既可以做正向代理,也可以做反向代理。

正向代理和反向代理的选择,我们更多的依据他们的应用场景。

交流学习

最后,把猿哥的座右铭送给你:投资自己才是最大的财富。 如果你觉得文章有帮助,请帮忙转发给更多的好友,或关注:猿java,持续输出硬核文章。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
6月前
|
负载均衡 安全 应用服务中间件
什么是正向代理和反向代理
正向代理是客户端与服务端之间的中介,用于访问受限资源,如V/P/N和动态IP代理,同时可隐藏客户端IP。反向代理则接收客户端请求并转发给后端服务器集群,隐藏真实服务器信息,常用于堡垒机和负载均衡,如nginx。正向代理焦点在客户端,反向代理关注服务端。
|
6月前
反向代理和正向代理的区别
反向代理和正向代理的区别
|
6月前
|
缓存 负载均衡 前端开发
详解正向代理和反向代理的不同用途
详解正向代理和反向代理的不同用途
222 10
|
4月前
|
缓存 负载均衡 监控
什么是反向代理?
反向代理是一种网络技术,位于Web服务器前,接收客户端请求并转发给适当的后端服务器,对客户端透明。它主要用于负载均衡、提高安全性和性能,例如通过缓存减少服务器负载和处理SSL加密。反向代理的益处包括保护内部服务器、分发流量,但也存在风险,如单点故障、配置复杂性和安全漏洞。为了确保安全和可靠性,需要谨慎配置和管理。
155 2
|
6月前
|
缓存 负载均衡 网络安全
正向代理和反向代理的区别
正向代理和反向代理的区别
|
负载均衡 安全 Cloud Native
简单理解正向代理和反向代理
简单理解正向代理和反向代理
149 2
|
应用服务中间件 网络安全 nginx
你好!正向代理!
你好!正向代理!
TinyProxy正向代理
TinyProxy正向代理
126 0
|
应用服务中间件 开发工具 nginx
Nginx代理服务 - 正向代理和反向代理
一、代理简介 1. 代理 2. Nginx代理服务 3. 正向代理和反向代理
Nginx代理服务 - 正向代理和反向代理
|
应用服务中间件
正向代理和反向代理
正向代理、反向代理