正向代理和反向代理

正向代理和反向代理

代理主要用在网络连接方面,不同类型的代理用于不同类型的连接。有一些代理用于隐藏用户的身份,而另外一些代理用于隐藏服务器的信息。常见的代理类型有正向代理和反向代理。这两种代理的名字有些相近,不过差别却非常大。

正向代理

正向代理.png

正向代理也就是大家常说的“代理”。用户向代理服务器发送请求,代理服务器从网络中检索数据。正向代理最典型的应用场景就是绕过网络限制。比如你们学校或公司的网络限制访问抖音,可以通过设置一台代理服务器,然后不直接连接抖音的服务,而是走代理,让代理来访问抖音的服务。

目的服务收到的请求来源IP会是代理服务器的IP,而不是用户的IP。这使得代理服务器可以提供一定的匿名性。

与正向代理功能相近的是NAT,两者都可以通过私有IP地址提供互联网访问。不过这两种技术在TCP/IP协议栈中的位置不同。NAT工作在网络层,而代理工作在应用层。对使用者来说,NAT对各种应用程序都是透明的;而使用代理则必须在应用程序中指定代理服务器的主机地址。

比如,使用NAT访问网页,不需要在浏览器上进行任何配置;而要使用代理访问网页,必须要在浏览器中指定代理的IP地址,如果代理仅支持HTTP协议,则只能通过代理访问Web服务器,不能访问FTP服务器。

由于NAT并非针对应用程序,因此在访问互联网时,NAT提供了比代理更高的可伸缩性。不过,NAT无法提供基于用户名和密码的身份验证。而代理支持身份验证,可以配置代理服务器仅允许特定用户访问互联网。

Web代理

Web代理是最常用的正向代理,用于代理HTTP请求。除了会把完整的url传递过去外,来自客户端的请求与常规HTTP请求几乎没有什么两样。下面是一个请求的例子:

GET http://en.wikipedia.org/wiki/Proxy_server HTTP/1.1
Proxy-Authorization: Basic encoded-credentials
Accept: text/html

代理服务器收到请求后,向目标服务器发起请求,并且返回响应,比如:

GET http://example.com/hello_world HTTP/1.1
Proxy-Authorization: Basic encoded-credentials
Accept: text/html

上面的例子只对HTTP协议生效。有一些Web代理允许通过HTTP CONNECT方法建立通信隧道,利用这个隧道,代理服务器可以转发任意TCP数据包。

通过CONNECT方法,客户端要求HTTP代理服务器将TCP连接转发到所需的目的地;然后,服务器代表客户端向目标服务器发起连接。服务器建立连接后,代理服务器将继续与客户端之间来回代理TCP数据流。在上面的过程中,只有初始的连接请求是HTTP,之后服务器仅代理建立的TCP连接。

客户端连接到代理服务器,在请求中指定主机和端口,例子如下:

CONNECT some.ssh.server:22 HTTP/1.1
Proxy-Authorization: Basic encoded-credentials

如果代理服务器允许连接并且连接到指定的主机,返回2XX成功响应:

HTTP/1.1 200 OK

现在,客户端发送到代理服务器的所有数据都蒋被转发给远程主机。

流行的HTTP代理服务器软件有Haproxy、Apache、Squid等。

反向代理

反向代理.png

反向代理一般用于控制对专用网络上服务器的访问。它代表一个客户端从一个或多个服务器检索资源,然后将这些资源返回给客户端,好像资源源自代理服务器本身一样。

流行的Web服务器经常使用反向代理功能,从而屏蔽HTTP功能“较弱”的应用程序框架。这里的“较弱”主要指的是处理大量负载能力比较弱,以及处理不同形式的请求格式的能力比较弱,比如HTTP协议就有HTTP(S)1.x,HTTP(S) 2.x多个版本。反向代理可以将HTTPS请求转换为HTTP请求、暂时缓存请求以保护后端服务器、处理一些cookie和会话数据等等。

反向代理是非常有用的。常见用途如下:

  1. 隐藏原始服务器的存在和特征。
  2. 可用于防御常见的Web攻击,比如分布式拒绝服务攻击(DDos)。
  3. TLS终结。可以将反向代理服务器部署在具有TLS加速功能的硬件上;同时Web服务器不需要再感知TLS相关的加解密内容。
  4. 负载均衡。反向代理可以将请求分配给多个服务器。比如将路径为/music的请求分配给音乐服务器;将路径为/video的请求分配给视频服务器。
  5. 内容缓存。反向代理可以通过缓存静态内容和动态内容来减少原始服务器上的负载。
  6. 内容压缩。反向代理可以压缩内容,来减少网络传输的时间。
  7. 用户鉴权。反向代理可以向没有任何身份验证功能的Web服务器添加基本的HTTP访问身份验证。

总结

与正向代理充当关联的客户端与任意服务器中介不同,反向代理是任意客户端与关联服务器的中介。换句话说,正向代理代表客户端,而反向代理代表服务器。

你可能感兴趣的:(正向代理和反向代理)