代理

​ 代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介。刚开始的时候,代理多数是帮助内网client访问外网server用的后来出现了反向代理,"反向"这个词在这儿的意思其实是指方向相反,即代理将来自外网客户端的请求转发到内网服务器,从外到内。


正向代理

​ 正向代理类似一个跳板机,代理访问外部资源比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了。

正向代理

正向代理的用途:

  • 访问原来无法访问的资源,如google

  • 可以做缓存,加速访问资源

  • 对客户端访问授权,上网进行认证

  • 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息


反向代理

​ 反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。反向代理一般就是指Nginx,是在主服务器之外加一层代理服务器,用户的请求会发送到代理服务器上,由代理服务器请求真正的服务器,获得到结果后再将结果返回给用户。

反向代理

反向代理的作用:

  • 保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网

  • 负载均衡,通过反向代理服务器来优化网站的负载


CDN

​ CDN是内容分发网络(Content Delivery Network)。是为了解决用户请求响应过慢的问题。比如用户在黑龙江,服务器在海南,用户请求的速度可能受距离、带宽的影响。CDN将几台机器分发在全国各地,用户发出的请求会选择就近的CDN服务器进行处理。CDN简单的来说就是存储一些静态文件的一台或多台服务器,通过复制,缓存主服务器等方式,将文件保存其中。

CDN

CDN作用:

  • CDN作用和反向代理相同,一方面加快用户访问速度,另一方面也减轻了后端服务器的负载压力

CDN和反向代理的区别:

  • CDN和反向代理的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据。
  • 反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接返回给用户。

应用

正向代理

反向代理/CDN:

  • cloudfare 是国外一家CDN服务商,对于个人用户提供了一些免费的服务,可以把自己的网址托管在 cloudfare 上,可以通过优选

    IP选择最优的CDN服务器,优选IP可以参考这个github工程

  • cloudfare 提供了worker反向代理功能,可以自定义添加worker,提供一个提升科学上网速度的脚本

    addEventListener('fetch',event => {
      let url=new URL(event.request.url);
      url.hostname='xxxx.xx'; // v2ray服务器的伪装网址
      let request=new Request(url,event.request);
      event.respondWith(
        fetch(request)
      )
    })
    

参考链接