haproxy将方案和位置重定向在一起

时间:2016-08-02 11:23:32

标签: redirect haproxy

我需要首先将特定的http网址重定向到其等效的https,然后再转到完全不同的https网址(不要问为什么我不能直接将原始http重定向到最终的https网址,这就是客户想要的,客户永远是对的!)。此外,我还需要能够将原始https重定向到不同的https。

所以,我需要的是能够重定向http://foo.bar.com => https://foo.bar.com然后https://foo.bar.com => https://another.foobar.com,以及重定向https://foo.bar.com => https://another.foobar.com

目前仅重定向https://foo.bar.com => https://another.foobar.com我正在使用它:

"dependencies": {
    "package_name": "git+https://github.com/your_username/forked_repository.git"        
}

在端口443上进行初始绑定,我知道将http重定向到https我会使用:

acl is_new_portal hdr(host) -i foo.bar.com
redirect location https://another.foobar.com code 302 if is_new_portal 

(使用代码302而不是301,因为最终将删除另一个.foobar.com,因此我不希望重定向永久缓存在客户端的浏览器中)

但是我需要能够进行两次重新定位,而且我不确定你们如何将两者结合起来?

1 个答案:

答案 0 :(得分:0)

我不确定您的问题是否与绑定或ACL有关。您已经拥有了问题的所有答案。您可以将它们包装在一个简单的前端:

frontend main
  bind :80
  bind :443 ssl crt yourCertFile

  acl is_new_portal hdr(host) -i foo.bar.com
  redirect scheme https code 302 if !{ ssl_fc } is_new_portal
  redirect location https://another.foobar.com code 302 if { ssl_fc } is_new_portal

  http-response set-header Strict-Transport-Security max-age=31536000;\ includeSubDomains;\ preload; if { ssl_fc }

if之后的ACL之间的空格被解释为AND。所以你会得到类似的东西:

  • 重定向到https如果主机是foo.bar.com而不是使用ssl
  • 重定向到https://another.foobar.com如果主机是foo.bar.com并使用ssl