HAProxy-Weiterleitungen und Matching basierend auf URI

7

Ich versuche, einen Test-Haproxy-Server einzurichten, der zwei grundlegende Bereiche abdeckt. Automatische Umleitung zu https, wenn der Benutzer http verwendet, jedoch nur, wenn ein bestimmter URL-Teil nicht vorhanden ist.

Wenn ein Benutzer beispielsweise zu http://www.test.com wechselt , wird er zu https://www.test.com weitergeleitet . Wenn der Benutzer jedoch zu https://www.test.com/blog oder http://www.test.com/blog wechselt , wird er zu http://www.test.com/blog weitergeleitet .

Dies ist mein aktueller Test haproxy.cfg. Ich verwende Haproxy 1.5-dev17

Jede Hilfe dabei wird sehr geschätzt.

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
rottmanj
quelle
Ihre Frage fehlt, was genau nicht funktioniert. Was passiert mit der von Ihnen veröffentlichten Konfiguration und was passiert nicht?
daff
Das Problem, das ich habe, ist, dass ich in einer Umleitungsschleife bin, wenn ich versuche, die Umleitung von https nach http zu erzwingen, wenn sich ein Benutzer auf test.com/blog befindet .
Rottmanj
Ich habe einige Ihrer Konfigurationen in einer Antwort (unten) überarbeitet. Lassen Sie mich wissen, ob sie für Sie funktionieren.
Nick Jennings

Antworten:

7

Lassen Sie mich einige Dinge vorschlagen:

  • Sie sollten Ihre unsichere und sichere Konfiguration in zwei separate Blöcke aufteilen. Auf diese Weise können Sie die ACL einfacher steuern und Fälle umleiten.
  • Verwenden Sie für die Umleitung das Format redirect location <absolute_url> if <conditions>
  • Versuchen Sie es mit URI-Pfaden path_beg -i /blog
  • Schließlich können Sie Personen nicht von einer HTTPS-Verbindung wegleiten. Dies wird als unsicher angesehen und nicht unterstützt.

Hier sind meine Änderungsvorschläge für den incomingTeil Ihrer Konfiguration, basierend auf diesen Kommentaren. Dies sollte http://www.test.com zu https://www.test.com umleiten UND schlägt fehl, wenn ein Versuch zu https://www.test.com/blog unternommen wird (Sie könnten dort eine Seite mit platzieren ein Linkvorschlag für den Benutzer).

    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

Hoffe das hilft.

Nick Jennings
quelle