Skip to content

什么是正向代理和反向代理?

1037字约3分钟

网络

2024-09-27

正如 David Wheeler 所说的那样:

"All problems in computer science can be solved by another level of indirection."

"计算机科学中的所有问题都可以通过增加一个间接层来解决"

代理 的思想在计算机的许多领域都有体现. 本质上就是原本 A 和 B 可以直接联系, 但是我们增加一个 C 作为中介, A 和 B 都通过 C 来进行联系.

那么我们不禁要问: 为什么要多此一举呢? 这不是凭空地增加了系统的复杂性吗? 本文将通过讲解计算机网络中 正向代理反向代理 两种模式来解答这个问题, 看一下引入代理 C 会为我们带来什么样的收益, 也解释其必要性. 文章将以下面这个顺序进行讲解:

我们知道一个完整的请求是由: client(客户端) -> proxy(代理) -> server(服务端) 组成的, 不管是正向代理还是反向代理其实都是遵循这个结构和请求步骤.

正向代理

顺着请求的方向进行代理, 即代理服务器是由客户配置, 为客户端服务, 去请求目标服务器.

我们考虑以下这个场景:

如果现在我们需要访问 GitHub 首页. 但是由于"墙"的原因, 我们无法直接使用电脑访问到 GitHub. 此时我们可以曲线救国, 先连接一台 代理服务器, 代理服务器将我们的请求转发到 GitHub, 再将 GitHub 的返回再转发给我们.

对于 GitHub 来说, 并不知道我们其实无法直接访问到它.

正向代理的作用

  1. 访问原来没法访问的资源.
  2. 可以做缓存, 加速访问资源.
  3. 对客户端访问授权, 进行认证.
  4. 代理可以记录用户访问的行为, 但是对外隐藏用户信息.

反向代理

与正向代理为客户端服务不同, 反向代理为目标服务器进行服务. 但是请注意, 请求的流程仍然还是: client(客户端) -> proxy(代理) -> server(服务端).

那么反向代理是为了解决什么问题呢? 请考虑以下场景:

对于百度来说, 有上亿人在进行访问. 单一的服务器必然没有办法接受这么大量的请求, 海量的网络内容也不可能存储在同一个服务器上. 所以百度内部必然有成千上万不同的服务器同时对用户进行服务. 那么当一个用户希望进行搜索的时候, 他怎么会知道自己想要访问的资源在哪个服务器上呢? 这显然是不可能的. 所以所有的用户的请求其实是发送到 baidu.com 这个域名的代理服务器, 代理服务器将转发我们的请求到对应的服务器节点, 节点的结果返回代理服务器后被再次返回给客户端.

对于用户来说, 只需要访问代理服务器而不需要关注真正提供响应的服务器, 代理服务器只进行请求和转发.

反向代理的作用

  1. 保证内网安全. 通常大型网站将反向代理服务器作为公网访问地址, 而自己的Web服务器是内网环境.
  2. 负载均衡. 代理服务器在转发的过程中可以进行流量的负载均衡.

总结

正向代理是面对客户端的代理, 服务端不知道实际请求的客户端是谁. 客户端和代理属于同一个 LAN.

反向代理是面对服务端的代理, 客户端不知道实际提供服务的服务端是谁. 服务端和代理属于同一个 LAN.

变更历史

最后更新于: 查看全部变更历史
  • docs: update docs

    于 2024/11/25
  • 更改navbar

    于 2024/11/4
  • 升级主题+整理文章格式

    于 2024/11/1
  • 新增博客-代理

    于 2024/9/27

Keep It Simple