Soy nuevo en HAProxy y me gustaría redirigir solicitudes en dominios definidos de archivos de mapas. Un breve ejemplo: en mi archivo redirigir.map:
abc.com xyz.com
def.ru idk.com
Entonces, si el usuario envía una solicitud al dominio abc.com o def.ru, será redirigido al dominio definido. Pero si solicita asd.com, no se debe realizar ninguna redirección. Mi objetivo es definir esas redirecciones en un archivo de mapa para que sea fácil de cambiar.
A continuación, me gustaría hacer lo mismo con las reescrituras de uri. Algo como:
http-request set-uri X if Y from rewrite.map
Entonces mi archivo de mapa se verá así:
(my X variable) (my Y variable)
/abc/def/specific www.mydomain.com/specific
¿Tengo siquiera la oportunidad de hacer esto con HAProxy?
Respuesta1
http-request redirect location https://%[hdr(host),map(/etc/haproxy/rewrite.map)]%[capture.req.uri] code 301 if { hdr(host),map(/etc/haproxy/rewrite.map) -i -m found }
Elhdr(x)
buscarlee el encabezado de la solicitud x
y devuelve el valor encontrado. (Técnicamente, lee la última aparición de este encabezado, pero el Host
encabezado solo debería aparecer una vez).
Elmap
convertidortoma el valor que lo precede (conectado con ,
), lo busca en la tabla del mapa y devuelve el resultado.
Si no se encuentra ninguna coincidencia, no se devuelve ningún resultado, por lo que la -m found
prueba no devuelve ningún resultado y la regla no coincide. ( -i
hace que la búsqueda no distinga entre mayúsculas y minúsculas).
Si la regla coincide, creamos una nueva URL para el Location
encabezado de respuesta, usando la cadena literal https://
(cámbiela http
si corresponde) + el nombre de host reescrito del archivo de mapa + el URI de solicitud original, que comienza con el inicio /
e incluye la ruta. y cadena de consulta, preservando todo el URI de solicitud.
Si no desea conservar el URI original, sino simplemente enviar todo a la página principal del sitio de destino, elimínelo %[capture.req.uri]
de la expresión.