是将X-Forwarded-host标头(Fetch API)设置为让我的反向代理请求转发到相应的服务的好方法



我的问题基本上是一个扩展的问题,您可以使用fetch api

设置主机标头

我有相同的问题,我的反向代理服务器(NGINX)需要将请求重定向到相应的服务。最初,我不知道主机是一个禁止的标题名称,因此阅读了其说明后https://www.rfc-editor.org/rfc/rfc/rfc7230#page-44,我曾经以为我可以将其设置为不同的值提取请求让我的反向代理服务器区分请求并转发到相应的服务。

现在在Google之后,我认为也许X-Forwarded-Host可以完成这项工作,但是我找不到足够的材料。

我的第二个问题是,如果无法编程修改主机,谁修改/设置其值以使其有用?

顺便说一句,我的提取请求很简单,

let response = await fetch(url, // The reverse proxy server address
{
  headers: {
    'X-Forwarded-Host' : "..."
  }
});

我的第二个问题是,如果无法编程修改主机,谁修改/设置其值以使其有用?

我将首先解决这个问题,因为我认为背景对于回答其余问题很重要。

主机标头源自URL。给定:

fetch("http://www.example.com/foo/bar")

…主机标头将为www.example.com。这与任何其他HTTP请求相同。例如<img src="http://www.example.com/foo.png">将使用Host: www.example.com触发请求。

同样,路径(GET /foo/bar HTTP/1.1和方案(客户端如何连接到服务器)也从URL派生。


我以为我可以在提取请求中将其设置为不同的值,以使我的反向代理服务器区分请求并转发到相应的服务。

您似乎误解了反向代理的工作方式。

客户端向反向代理提出请求,并要求它给您一个任意的URL(这就是向前代理的工作方式)。

相反,操作网站的人配置所需的URL指向反向代理,然后配置反向代理以在请求中转发。

例如。您可以将公共面向DNS配置为www.example.com指向反向代理的面向互联网的一侧,然后通过向http://private.on.my.lan:8012/myservice/foo/bar提出请求来配置反向代理以响应https://www.example.com/foo/bar的请求。

然后fetch只需请求https://www.example.com/foo/bar,而其他所有内容都会由反向代理透明地处理。


不同的请求仅通过具有不同的URL和可能不同的主机名来完成。

 https://www.example.com/foo/bar
 https://www.example.com/baz
 https://www.example.net/quack
 https://www.example.info/foo/bar

…都可以指向相同的反向代理,可以具有不同方式处理它们的逻辑。

最新更新