HaProxy 别名域

HaProxy 别名域

我有几个域名是我的主域名的变体。我想将它们全部重定向到我的主域名,而忽略协议 (http/https) 和子域名 (www./beta.)。有没有办法在 HAProxy 配置中做到这一点?

我在想

redirect prefix https://*.domainA.com code 301 if { hdr(host) -i *.domainB.com }
redirect prefix https://*.domainA.com code 301 if { hdr(host) -i *.domainC.org }

答案1

重定向*.example.orghttps://*.example.com,保留子域、路径和查询字符串(如果存在)(为便于阅读添加了换行符)...

http-request redirect 
  location 
  https://%[hdr(host),lower,regsub(\.example\.org$,.example.com,)]%[capture.req.uri] 
  code 301
  if { hdr_end(host) -i .example.org  }

接收传入的主机标头,将其转换为小写,然后使用正则表达式替换将其.example.org锚定到末尾,更改为.example.com,然后附加捕获的请求 URI,并将代码附加到 301(如果标Host头以 结尾).example.org,不区分大小写。

测试...

$ curl -v http://longcat.example.org/test?cat=1
* Connected to longcat.example.org (127.0.0.1) port 80 (#0)
> GET /test?cat=1 HTTP/1.1
> User-Agent: curl/7.35.0
> Host: longcat.example.org
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Content-length: 0
< Location: https://longcat.example.com/test?cat=1
< Connection: close

使用混合大小写的主机头进行测试...

$ curl -v http://TACGNOL.eXaMpLe.ORG/ohai?cat=2
* Connected to TACGNOL.eXaMpLe.ORG (127.0.0.1) port 80 (#0)
> GET /ohai?cat=2 HTTP/1.1
> User-Agent: curl/7.35.0
> Host: TACGNOL.eXaMpLe.ORG
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Content-length: 0
< Location: https://tacgnol.example.com/ohai?cat=2
< Connection: close

该解决方案依赖于 HAProxy 1.6 中首次引入的功能。

对每一对域重复此行并进行适当的编辑。

相关内容