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 redirigir a la misma URL en https, conservando los parámetros de consulta. Por lo tanto, http://foo.com/bar redirigiría a https://foo.com/bar
redirect scheme https code 301 if { hdr(Host) -i www.mydomain.com } !{ ssl_fc }
http-request redirect scheme https code 301 if !{ ssl_fc }
. La documentación para la redirección http en ALOHA HAProxy 7.0 incluso menciona que " la sintaxis de ambas directivas es la misma, dicho esto, la redirección ahora se considera heredada y las configuraciones deben pasar al formulario de redirección de solicitud http ". Deduzco, sin estar completamente seguro, que la misma explicación se aplica a las versiones más recientes de la versión de código abierto de HAProxy.No tengo suficiente reputación para comentar una respuesta anterior, por lo que estoy publicando una nueva respuesta para complementar la respuesta de Jay Taylor. Básicamente, su respuesta hará el redireccionamiento, aunque un redireccionamiento implícito, lo que significa que emitirá un 302 (redireccionamiento temporal), pero dado que la pregunta informa que todo el sitio web será servido como https, entonces el redireccionamiento apropiado debería ser un 301 (redireccionamiento permanente ).
Parece un cambio pequeño, pero el impacto puede ser enorme dependiendo del sitio web, con un redireccionamiento permanente le informamos al navegador que ya no debería buscar la versión http desde el principio (evitando redireccionamientos futuros) - un ahorro de tiempo para https sitios. También ayuda con el SEO, pero sin dividir el jugo de sus enlaces.
fuente
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 }
fuente
Según http://parsnips.net/haproxy-http-to-https-redirect/ debería ser tan fácil como configurar su haproxy.cfg para que contenga lo siguiente.
fuente
La mejor forma garantizada de redirigir todo http a https es:
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 hace daño. Si tiene
mode tcp
en la sección de valores predeterminados (como lo hice yo), entonces es necesario.fuente
Una ligera variación de la solución de user2966600 ...
Para redirigir todo excepto una sola URL (en caso de múltiples frontend / backend):
fuente
Como dijo Jay Taylor, HAProxy 1.5-dev tiene la
redirect scheme
directiva de configuración, que logra exactamente lo que necesita.Sin embargo, si no puede usar 1.5, y si está dispuesto a compilar HAProxy desde la fuente, hice una copia de respaldo de la
redirect scheme
funcionalidad para que funcione en 1.4. Puede obtener el parche aquí: http://marc.info/?l=haproxy&m=138456233430692&w=2fuente
fuente
En las versiones más recientes de HAProxy se recomienda utilizar
para redirigir el tráfico http a https.
fuente
Si desea reescribir la URL, debe cambiar el host virtual de su sitio agregando estas líneas:
Pero, si desea redirigir todas sus solicitudes en el puerto 80 al puerto 443 de los servidores web detrás del proxy, puede probar este ejemplo conf en su haproxy.cfg:
Espero que esto te ayude
fuente
¿Por qué no usa ACL para distinguir el tráfico? encima de mi cabeza:
Esto se suma a lo que respondió Matthew Brown.
Consulte los documentos de ha , busque cosas como hdr_dom y más abajo para encontrar más opciones de ACL. Hay muchas opciones.
fuente
Agregue esto en la configuración de la interfaz de HAProxy:
fuente
Se puede hacer así:
Cualquier tráfico que llegue a http se redirigirá a https
fuente
la declaración de redireccionamiento es heredada
utilice redireccionamiento de solicitud http en su lugar
fuente
Simplemente:
fuente