正向代理(Proxy)在网络上是用来代理客户端(Client)的,而反向代理(Reverse Proxy)在网络上是用来代理服务端(Server)的。

通常情况下,咱们作为客户端(Client),访问网络上的资源,都是发送请求到互联网(Internet),之后导向相应的服务端(Server)获取资源。

正向代理(Proxy)

正向代理就是指在Client和Internet之间加一个中间服务,这个服务作为Client的代理人,拦截所有Client发出去的通讯,以代理人的身份再统一发出,从而代表Client和Internet进行交流,避免Client和Internet的直接交流。

这样加上一个正向代理(Proxy)的好处是什么呢?

  • Proxy可以隐藏Client的IP, 暴露出去只是Proxy自己的IP,从而保护Client的隐私安全。
  • Proxy可以作为缓存,当有相同资源的请求时,可以直接返回缓存内容,提高响应速度。
  • Proxy可以作为过滤,限制或者阻断访问Internet上面一些特定内容。
  • Proxy可以作为跳板(比如VPN),访问一些被防火墙或者网络区域限制的内容。

反向代理(Reverse Proxy)

反向代理(Reverse Proxy), 就是指在Internet和Web Server之间加上一个中间服务,这个服务作为Web Server的代理人,拦截所有发给Web Server的请求,然后再统一分发给代理的Web Servers, 避免Internet网络流量直接发给Web Server.

这样加上一个反向代理(Reverse Proxy)有什么好处呢?

  • ReverseProxy可以隐藏WebServerIP, 只有反向代理的IP暴露网络, 从而保护WebServer。
  • ReverseProxy可以作为LoadBalancer,合理分配流量到集群里的WebServer。
  • ReverseProxy可以作为网站静态内容的缓存,大大提高响应速度并减轻WebServer负担。
  • ReverseProxy可以代为处理SSL加密(计算量较大),减轻WebServer的负担。

一些杂谈与工程实践经验

ReverseProxy还有一个比较有意思的功能就是可以作为GlobalServerLoadBalancer,区别于普通的流量分配的LoadBalancer, GlobalServerLoadBalancer的作用更多是让不同地域的人访问网站会更快。大型网站(比如Netflix, Google, Amazon etc),会在全世界各个地方部署ReverseProxy,然后把相应区域的流量导到地理位置更近的Web Server,从而提供更快速的响应服务。

Nginx应该是最常见的反向代理服务器之一了,如果你从事Web相关的开发工作,一定对502这个报错非常熟悉。

在网络架构的工程实践上,如果一个私有网络想要访问其他网络的资源,那么一般需要给私有网络加上一个正向代理(Proxy)。如果一个私有网络想要被其他网络访问,那么一般需要给私有网络加上一个反向代理(Reverse Proxy),或者API Gateway(本身也可以算作一种Reverse Proxy)。

为啥代理Client就是”正向”,而代理Server就是”反向”呢?

我的猜测是这个正反方向是指的请求的方向:Client的代理请求是向外发出的,直观理解上可能更靠近正向;Server的代理请求是向内接收的,直观上理解可能更靠近反向。实际上这个也不重要。咱们只需要知道正向代理代理的是Client,反向代理代理的是Server其实就够了。

参考链接

反向代理为何叫反向代理?