102 votes

HAProxy redirigeant http vers https (ssl)

J'utilise HAProxy pour l'équilibrage de charge et je souhaite que mon site ne prenne en charge que le protocole https. Ainsi, je voudrais rediriger toutes les demandes sur le port 80 vers le port 443.

Comment dois-je m'y prendre ?

Edit : Nous aimerions rediriger vers la même url sur https, en préservant les paramètres de la requête. Ainsi, http://foo.com/bar serait redirigé vers https://foo.com/bar

152voto

Jay Taylor Points 3262

J'ai trouvé que c'était la plus grande aide :

Utilisez HAProxy 1.5 ou plus récent, et ajoutez simplement la ligne suivante à la configuration du frontend :

redirect scheme https code 301 if !{ ssl_fc }

69voto

Marcos Abreu Points 321

Je n'ai pas assez de réputation pour commenter une réponse précédente, je poste donc une nouvelle réponse pour compléter celle de Jay Taylor. En gros, sa réponse va faire la redirection, une redirection implicite cependant, ce qui signifie qu'elle va émettre un 302 (redirection temporaire), mais puisque la question informe que le site Web entier sera servi en https, alors la redirection appropriée devrait être un 301 (redirection permanente).

redirect scheme https code 301 if !{ ssl_fc }

Cela semble être un petit changement, mais l'impact peut être énorme selon le site web. Avec une redirection permanente, nous informons le navigateur qu'il ne doit plus chercher la version http dès le départ (évitant ainsi les futures redirections) - un gain de temps pour les sites https. Cela contribue également au référencement, mais sans diviser le jus de vos liens.

42voto

user2966600 Points 481

Pour rediriger tout le trafic :

redirect scheme https if !{ ssl_fc }

Pour rediriger une seule url (en cas de frontend/backend multiples)

redirect scheme https if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }

21voto

Maitreya Points 61

La meilleure façon garantie de rediriger tout ce qui est http vers https est :

frontend http-in
   bind *:80
   mode http
   redirect scheme https code 301

C'est un peu plus sophistiqué avec le "code 301", mais autant faire savoir au client que c'est permanent. La partie 'mode http' n'est pas essentielle dans la configuration par défaut, mais ne peut pas faire de mal. Si vous avez mode tcp dans la section defaults (comme je l'ai fait), alors c'est nécessaire.

15voto

Matthew Brown Points 345

Selon http://parsnips.net/haproxy-http-to-https-redirect/ il devrait être aussi facile que de configurer votre haproxy.cfg pour contenir ce qui suit.

#---------------------------------------------------------------------
# Redirect to secured
#---------------------------------------------------------------------
frontend unsecured *:80
    redirect location https://foo.bar.com

#---------------------------------------------------------------------
# frontend secured
#---------------------------------------------------------------------
frontend  secured *:443
   mode  tcp
   default_backend      app

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    mode  tcp
    balance roundrobin
    server  app1 127.0.0.1:5001 check
    server  app2 127.0.0.1:5002 check
    server  app3 127.0.0.1:5003 check
    server  app4 127.0.0.1:5004 check

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X