HAProxy 重定向和基于 URI 的匹配

HAProxy 重定向和基于 URI 的匹配

我正在尝试设置一个涵盖两个基本领域的测试 haproxy 服务器。如果用户使用 http,则自动重定向到 https,但前提是特定 uri 部分不存在。

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

这是我当前测试的 haproxy.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

答案1

让我提出几点建议:

  • 您应该将不安全和安全的配置分成两个独立的块,这样您可以更轻松地控制 ACL 和重定向情况。
  • 对于重定向,请尝试使用格式redirect location <absolute_url> if <conditions>
  • 要检测 URI 路径,请尝试使用path_beg -i /blog
  • 最后,您将无法真正将人们从 HTTPS 连接重定向,这被认为是不安全的并且不受支持。

以下是我incoming根据这些评论对您的配置部分提出的修改建议。这应该重定向http://www.test.comhttps://www.test.com尝试执行以下任一操作时,将失败:https://www.test.com/blog(您可以在那里放置一个页面,为用户提供链接建议)。

    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

希望这可以帮助。

相关内容