Pregunta HAProxy redirige http a https (ssl)


Estoy usando HAProxy para equilibrar la carga y solo quiero que mi sitio admita https. Por lo tanto, me gustaría redirigir todas las solicitudes en el puerto 80 al puerto 443.

¿Cómo haría esto?

Editar: nos gustaría redireccionar a la misma url en https, preservando los parámetros de consulta. Así, http://foo.com/bar redirigiría a https://foo.com/bar


73
2017-11-05 07:10


origen


Respuestas:


Encontré que esta es la mayor ayuda:

Use HAProxy 1.5-dev13 o posterior, y simplemente agregue la siguiente línea a la configuración del frontend:

redirect scheme https code 301 if !{ ssl_fc }

108
2018-05-13 18:06



No tengo suficiente reputación para comentar una respuesta anterior, así que estoy publicando una nueva respuesta para complementar la respuesta de Jay Taylor. Básicamente, su respuesta hará la redirección, una redirección implícita, lo que significa que emitirá un 302 (redirección temporal), pero dado que la pregunta informa que todo el sitio web se servirá como https, entonces la redirección apropiada debería ser un 301 (redirección permanente) )

redirect scheme https code 301 if !{ ssl_fc }

Parece un pequeño cambio, pero el impacto puede ser enorme dependiendo del sitio web, con un redireccionamiento permanente. Estamos informando al navegador que ya no debería buscar la versión http desde el comienzo (evitando redirecciones futuras), un ahorro de tiempo para https sitios. También ayuda con SEO, pero no divide el jugo de tus enlaces.


54
2018-02-18 15:26



Para redirigir todo el tráfico:

redirect scheme https if !{ ssl_fc }

Para redirigir una sola URL (en caso de múltiples frontend / backend)

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


33
2017-11-07 21:45



De acuerdo a http://parsnips.net/haproxy-http-to-https-redirect/ debería ser tan fácil como configurar su haproxy.cfg para contener el siguiente.

#---------------------------------------------------------------------
# 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

13
2017-11-05 08:32



Una pequeña variación de la solución de user2966600 ...

Para redirigir todo excepto una sola URL (en caso de múltiples frontend / backend):

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

8
2018-04-22 13:10



La mejor manera garantizada para redirigir todo http a https es:

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

Esto es un poco más elegante usando el 'código 301', pero también podría hacerle saber al cliente que es permanente. La parte 'modo http' no es esencial con la configuración predeterminada, pero no puede doler. Si usted tiene mode tcp en la sección de valores predeterminados (como lo hice), entonces es necesario.


6
2018-01-12 00:34



Como dijo Jay Taylor, HAProxy 1.5-dev tiene el redirect scheme directiva de configuración, que logra exactamente lo que necesita.

Sin embargo, si no puede usar 1.5, y si está listo para compilar HAProxy desde el origen, copié el redirect scheme funcionalidad para que funcione en 1.4. Puedes obtener el parche aquí: http://marc.info/?l=haproxy&m=138456233430692&w=2


4
2017-11-16 00:52