Назад | Перейти на главную страницу

HAProxy Redirects и сопоставление на основе URI

Я пытаюсь настроить тестовый сервер haproxy, который будет охватывать 2 основные области. Автоматическое перенаправление на https, если пользователь использует http, но только при отсутствии определенной части 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

Позвольте мне предложить несколько вещей:

  • Вы должны разделить вашу небезопасную и безопасную конфигурацию на два отдельных блока, чтобы вам было легче контролировать ACL и случаи перенаправления.
  • Для перенаправления попробуйте использовать формат redirect location <absolute_url> if <conditions>
  • Для определения путей URI попробуйте использовать path_beg -i /blog
  • Наконец, вы не сможете перенаправлять людей от HTTPS-соединения, это считается небезопасным и не поддерживается.

Вот предлагаемые мной модификации incoming часть вашей конфигурации, основанная на этих комментариях. Это должно перенаправить http://www.test.com к https://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

Надеюсь это поможет.