最近在和大佬交流时偶然被问到何为反向代理?何为正向代理?两者区别又为何?
身为一名后端开发的程序猿,我相信反向代理服务器这个名词大家已如家常便饭,但突然解释其含义却如同刺猬,无处下手。再被问到何为正向代理,两者区别又如何?当场内心是挺懵的。。。
于是,我查询了相关的资料,做了一点总结,在这分享一二,望各位大佬斧正。
代理服务器
代理服务器是一种即可作为客户端、也可作为服务器的中间程序,主要用于网络请求转发。
正向代理
代理客户端,访问目标服务器
用途:
- 突破IP访问限制:通过代理服务器,可以突破自身IP限制,例如:访问国外的网站等。
- 缓存功能,提高访问速度:通常代理服务器都会设置一个较大的硬件缓冲区,将部分响应缓存到缓冲区中,下次客户端访问相同资源时,直接返回结果。
- 隐藏客户端IP:客户端可以通过正向代理隐藏自身IP,免受攻击。
反向代理
代理目标服务器,和客户端进行交互
用途:
- 负载均衡:可以在反向代理服务器上提供负载均衡,根据规则(轮询,ip hash, url hash, 最少连接数等)将请求分发到目标服务器的集群中。
- 服务限流:可在反向代理服务器上设置限流规则,减轻服务端的负荷压力,提高系统的稳定性。
- 安全控制:反向代理服务器可以作为应用层防火墙,防止一些网络攻击(例如DDos)。还可以为后端服务器进行统一的加密,例如配置HTTPS的证书和私钥。
- 缓存功能,提高访问速度:通常代理服务器都会设置一个较大的硬件缓冲区,将部分响应缓存到缓冲区中,下次客户端访问相同资源时,直接返回结果。
- 隐藏服务器IP:通常一个复杂的系统服务端会有多个微服务组成,但从安全角度考虑一般只会暴露一个公网IP(或者DNS),在反向代理服务器这边根据路由匹配分发到不同的微服务中(一般微服务都是使用公司的小网IP)
正向代理和方向代理的区别
- 正向代理是客户端的代理,一般是客户端架设的。正向代理中,服务器不知道具体的客户端是谁。
- 反向代理是服务器的代理,一般是服务端架设的。反向代理中,客户端不知道具体的服务端是谁。
- 正向代理主要解决自身IP访问限制的问题。反响代理主要解决负载均衡,服务限流以及安全控制等问题。