HAProxyredirect和基于URI的匹配

我试图build立一个testinghaproxy服务器,将涵盖2个基本领域。 如果用户正在使用http,但只有在特定的uri部分不存在的情况下才能自动redirect到https。

例如,如果用户访问http://www.test.com,他们将被redirect到https://www.test.com 。 但是,如果用户转到https://www.test.com/blog或http://www.test.com/blog,他们将被redirect到http://www.test.com/blog 。

这是我目前的testinghaproxy.cfg。 我正在运行haproxy 1.5-dev17

任何帮助,这是非常感谢。

global log 127.0.0.1 local0 log 127.0.0.1 local1 notice maxconn 15000 user haproxy group haproxy defaults log global mode http option httplog option dontlognull option abortonclose option http-server-close option redispatch retries 3 timeout queue 600s timeout connect 9s timeout client 60s timeout server 60s balance roundrobin # Set up application listeners here. frontend incoming bind *:80 name http acl has_blog_uri path /blog /blog/ redirect scheme https if !has_blog_uri !{ ssl_fc } bind *:443 ssl crt /etc/haproxy/test.pem use_backend blog_app if has_blog_uri default_backend rails_app backend rails_app option httpchk GET /app_health # server app1 10.1.1.1:8080 weight 1 check server app2 10.1.1.2:8080 weight 1 check backend blog_app option httpchk GET /blog/check.txt server blog 10.1.1.3:8080 check 

让我build议几件事情:

  • 您应该将不安全和安全的configuration分隔成两个独立的块,这样您可以更轻松地控制ACL和redirect个案。
  • 对于redirect尝试使用格式redirect location <absolute_url> if <conditions>
  • 要检测URIpath,请尝试使用path_beg -i /blog
  • 最后,你不能实际上将人们redirect到HTTPS连接,这被认为是不安全的,不被支持。

这里是我build议修改您的configuration的incoming部分,根据这些评论。 这应该redirecthttp://www.test.com到https://www.test.com ,并将尝试https://www.test.com/blog (您可以把页面与对用户的链接build议)。

  frontend public bind *:80 acl has_blog_uri path_beg -i /blog redirect location https://www.test.com if !has_blog_uri use_backend blog_app if has_blog_uri frontend public-ssl bind *:443 ssl crt /etc/haproxy/test.pem acl has_blog_uri path_beg -i /blog use_backend rails_app if !has_blog_uri 

希望这可以帮助。