在 HAProxy 中根据 Host 头重写请求 URI

在 HAProxy 中根据 Host 头重写请求 URI

我想设置 HAProxy 以将 HTTP 请求转发到某些后端服务器,但我还需要它根据主机重写 URI 部分。我已阅读文档,但似乎要求答复不适合此目的。您知道使用 HAProxy 是否可行吗?

以下是我想要完成的事情的详细信息:

收到的请求:

http://www.original-domain.com/

将在以下之间取得平衡:

http://server1/domains/www.original-domain.com/
...
http://serverN/domains/www.original-domain.com/

代理应该能够处理任意数量的域(original-domain.com 可以是任何内容,它不限于一组固定的值)。

为了使其正常工作,HAProxy 需要重写这样的请求:

获取 /原始 uri HTTP/1.1
主机:original-domain.com

到:

获取 /domains/original-domain.com/original-uri HTTP/1.1
主机:serverN

并将该请求转发给其中一台内部服务器。

答案1

您可以尝试使用 HAProxy 中的“重定向”选项执行此操作。

redirect prefix http://server1/domains/

但是,这是一个重定向,因此它不透明。

我不相信 HAProxy 可以透明地重写 URL(在前往后端服务器的途中)。

答案2

HAProxy 的创建者 Willy Tarreau 在 HAProxy 邮件列表中回答了我的问题。

不,我们仍然无法做到这一点。我们必须实现一种机制来提取请求的部分内容并在其他地方重用它们(基本上是基于会话的变量),但目前还没有。不过,这已经在路线图中了。

不幸的是,您必须找到另一种方法来实现这一点。如果您只有几个域名,则可以编写一些规则(每个域名一个)来执行条件重写(例如:如果 Host 与 XX 匹配,则将 URI 重写为 /domains/XX/original-uri)。

如果你有太多这样的任务,你最好考虑使用其他产品。我认为 nginx 特别适合这些任务。

问候,威利

相关内容