
Estoy intentando reescribir parte de una uri usando reqrep.
haproxy.cfg (original)
global
log 127.0.0.1 local2
daemon
maxconn 256
defaults
mode http
log global
option httplog
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend haproxy_in
bind *:8080
default_backend myapp
backend myapp
server app1 localhost:8123 check
Cuando hago esto, veo que haproxy registra lo que espero. Tenga en cuenta que estoy usando un servidor Python ficticio que no puede manejar POST, por lo que el 501 no es motivo de preocupación, solo el hecho de que la solicitud fue enrutada es lo que estoy buscando.
haproxy_in myapp/app1 0/0/0/1/5 501 379 - - ---- 0/0/0/0/0 0/0 "POST /please/rewrite/this/ HTTP/1.1
También veo que mi servidor registra lo siguiente.
"POST /please/rewrite/this/ HTTP/1.1" 501 -
haproxy.cdf (con reqrep)
global
log 127.0.0.1 local2
daemon
maxconn 256
defaults
mode http
log global
option httplog
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend haproxy_in
bind *:8080
default_backend myapp
backend myapp
reqrep ^([^\ :]*\ /) "POST\ /test\ HTTP/1.1"
server app1 localhost:8123 check
Con el reqrep agregado, recibo mensajes de error de haproxy
haproxy_in myapp/<NOSRV> -1/-1/-1/-1/1 400 187 - - PR-- 0/0/0/0/3 0/0 "POST /please/rewrite/this/ HTTP/1.1"
¿Aparentemente mi solicitud no es válida? Parece que la solicitud no sale de haproxy. ¿Cómo puedo ver en qué se reescribe la solicitud? Probé varios comandos reqrep diferentes con diferentes expresiones regulares y todos parecen darme el mismo error.
Mi versión de haproxy es 1.5.16.
Respuesta1
reqreptoma tres parámetros <search> <string> <cond>
.
<search>
: es la URL, por ejemplo www.somedomain.com/please/rewrite/this/
<string>
: es la cadena de reemplazo, por ejemplo /test
<cond>
: es para condiciones especiales, ignórelo por ahora.
En el ejemplo, el reemplazo hará lo siguiente:
FROM: http://www.somedomain.com/please/rewrite/this/
TO: /test
Lo siguiente hará el reemplazo:
reqrep http://www.somedomain.com/please/rewrite/this/ http://www.somedomain.com/test
Si desea reemplazar ignorando el dominio, debe configurarlo con expresiones regulares:
reqrep ^([^\ :]*)\/please/rewrite/this/ \1\/test