假设 east.proxy.example 与 west.proxy.example 解析到同一个普通 HTTP 代理监听端口。使用任一名称的客户端可以发送:

GET http://www.example.org/report HTTP/1.1
Host: www.example.org

该请求标识的是网站,并不携带客户端在打开 TCP 之前解析出的代理别名。因此,由 Host 推导出的 Express 主机名无法依据这些代理子域选择路由。

如果你同时控制客户端和代理,请提供显式的路由输入。对于实现了 X-Route 标签的代理:

curl --proxy http://east.proxy.example:8080 \
  --proxy-header 'X-Route: east' \
  https://www.example.org/

--proxy-header 针对的是与代理之间的通信,包括 CONNECT。HTTPS 请求上的普通 -H 头属于目标站点的加密 HTTP 交换内部。

服务端必须实现并授权该路由策略,然后在不再转发给网站的前提下使用该标签。另一种做法是用单独配置的监听端点或代理账户作为路由输入。

对于 HTTPS 目标,Node 通过其 HTTP 服务器的 connect 事件接收初始隧道请求。普通 Express 请求中间件不处理该事件。CONNECT 的目标仍然标识目标服务器,而不是代理别名。

相关文章