跳到正文

反向代理

Reverse Proxy

高级通用

反向代理(Reverse Proxy)是放在网站入口、接收用户请求并转交给后端服务的服务器。它让用户通过同一个地址访问不同服务,也能让后端不直接暴露在公网;例如把网站页面和 API 请求转给各自的服务。

你可能会说:「我想让网站和 API 共用一个域名,按访问路径转到不同服务,用户不用知道后端地址。」

读之前建议先了解(这是一个高级概念)

动手看看

页面请求浏览器反向代理页面服务API服务
1

用户打开订单页,浏览器向网站地址请求 /orders。这个地址的公开入口是反向代理,而不是页面服务。

要点

  1. 1

    用户先连接网站入口

    你访问产品域名时,请求先到反向代理,而不是直接到处理业务的服务。代理再向后端发起请求,并把响应传回给你,所以浏览器通常只需要知道入口地址。

  2. 2

    转发规则决定请求去向

    我们可以按域名或路径配置规则:访问首页交给前端服务,访问 /api 交给后端服务。因为入口统一,两个服务即使运行在不同端口,也能对外呈现为一个网站。

  3. 3

    代理和后端各管一段

    代理可以在入口处理 HTTPS、转发请求或分配流量,后端负责实际的页面与业务逻辑。排查问题时你要看请求是否到达代理、代理选了哪个后端,以及后端返回了什么。

容易混淆的地方

反向代理替网站的后端接收请求;正向代理则替用户去访问目标网站,代理的是访问者一侧。它也不是重定向:重定向会告诉浏览器换个地址重新发请求,反向代理通常在服务器之间转发,浏览器仍访问原来的入口地址。

什么时候用

适合用

  • 你把网站页面和 API 部署在不同端口,却想让用户通过同一个域名访问它们。
  • 你的产品有多个后端实例,想在统一入口把请求分配给可用的实例。
  • 你想让后端只接受来自入口的请求,由入口统一处理对外的 HTTPS 连接。

不适合用

  • 你只是想把旧页面地址永久换成新地址,让浏览器和搜索引擎知道新位置;用重定向更合适。
  • 你的网站只有静态文件,没有需要转发的后端请求;直接用静态网站托管即可。
  • 你想让用户设备通过中间服务器访问外部网站;这属于正向代理的用途。

练一练

你做的 AI 工具中,网页运行在一个端口,处理对话的 API 运行在另一个端口。你希望用户只访问一个域名,并让 /api 请求到达 API 服务。该怎么做?

让 AI 帮你做

请为我的网站配置反向代理:同一域名下,/api 路径转发到后端服务,其余请求转发到前端服务。先确认现有部署方式和端口,再给出配置、验证方法,并说明后端是否需要对公网开放。

接下来学什么