HAProxy 1.7 使用映射文件重定向/重写特定域

HAProxy 1.7 使用映射文件重定向/重写特定域

我是 HAProxy 的新手,我想重定向映射文件定义域中的请求。一个简短的示例:在我的 redirect.map 文件中:

abc.com xyz.com
def.ru idk.com

因此,如果用户向域 abc.com 或 def.ru 发送请求,他将被重定向到定义的域。但如果他请求 asd.com,则不应进行重定向。我的目标是在映射文件中定义这些重定向,以便于更改。

接下来我想对 uri 重写做同样的事情。例如:

http-request set-uri X if Y from rewrite.map

因此我的地图文件将如下所示:

 (my X variable)    (my Y variable)
/abc/def/specific  www.mydomain.com/specific

我是否有机会使用 HAProxy 来做到这一点?

答案1

http-request redirect location https://%[hdr(host),map(/etc/haproxy/rewrite.map)]%[capture.req.uri] code 301 if { hdr(host),map(/etc/haproxy/rewrite.map) -i -m found }

hdr(x)拿来读取请求标头x并返回找到的值。(从技术上讲,它读取此标头的最后一次出现,但该Host标头应该只出现一次。)

map转换器取其前面的值(与 连接,),在地图表中查找,并返回结果。

如果未找到匹配项,则不返回任何结果,因此-m found测试不返回任何结果并且规则不匹配。(-i使查找不区分大小写)。

如果规则匹配,我们将为Location响应标头构建一个新的 URL,使用文字字符串https://http如果合适,将其更改为)+ 来自映射文件重写的主机名 + 原始请求 URI,该 URL 以前导开头/并包含路径和查询字符串,保留整个请求 URI。

如果您不想保留原始 URI,而只是将所有内容发送到目标站点的主页,然后%[capture.req.uri]从表达式中删除。

相关内容