Question Redirection HAProxy et correspondance basée sur l'URI


Je tente d'installer un serveur de test haproxy qui couvrira 2 domaines de base. Redirection automatique vers https si l'utilisateur utilise http, mais uniquement si une partie uri spécifique n'est pas présente.

Par exemple, si un utilisateur va sur http://www.test.com ils seraient redirigés vers https://www.test.com. Mais si l'utilisateur va à https://www.test.com/blog ou http://www.test.com/blog ils seraient redirigés vers http://www.test.com/blog.

Ceci est mon test actuel haproxy.cfg. Je cours haproxy 1.5-dev17

Toute aide à cet égard est grandement appréciée.

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

6
2018-02-23 11:59


origine


Votre question manque ce qui ne fonctionne pas exactement. Qu'advient-il de la configuration que vous avez publiée et que ne se produit-il pas? - daff
Le problème que je rencontre est que si j'essaie de forcer la redirection de https vers http lorsqu'un utilisateur est activé test.com/blog cela me laisse dans une boucle de redirection. - rottmanj
J'ai retravaillé une partie de votre configuration dans une réponse (ci-dessous), laissez-moi savoir si cela fonctionne pour vous. - Nick Jennings


Réponses:


Permettez-moi de suggérer quelques choses:

  • Vous devez séparer votre configuration non sécurisée et sécurisée en deux blocs distincts. Vous pourrez ainsi contrôler plus facilement la LCA et rediriger les cas.
  • Pour la redirection, essayez d'utiliser le format redirect location <absolute_url> if <conditions> 
  • Pour détecter les chemins d’URI, essayez d’utiliser path_beg -i /blog
  • Enfin, vous ne serez pas en mesure de rediriger les gens loin d'une connexion HTTPS, cela est considéré comme non sécurisé et n'est pas pris en charge.

Voici mes modifications suggérées à la incoming partie de votre configuration, sur la base de ces commentaires. Cela devrait rediriger http://www.test.com à https://www.test.com AND échouera lorsqu’on essaie de https://www.test.com/blog (vous pouvez y placer une page avec une suggestion de lien pour l'utilisateur).

    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

J'espère que cela t'aides.


7
2018-02-23 19:35