
Estou tentando reescrever parte de um 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
Quando faço isso, vejo o haproxy registrar o que espero. Observe que estou usando um servidor python fictício que não consegue lidar com POST, então o 501 não é motivo de preocupação, apenas o fato de a solicitação ter sido roteada é o que estou procurando.
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
Também vejo meu servidor registrar o seguinte.
"POST /please/rewrite/this/ HTTP/1.1" 501 -
haproxy.cdf (com 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
Com o reqrep adicionado, recebo mensagens de erro do 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 minha solicitação é inválida? Parece que a solicitação não sai do haproxy. Como posso ver em que a solicitação foi reescrita? Eu tentei vários comandos reqrep diferentes com regex diferentes e todos parecem me dar o mesmo erro.
Minha versão haproxy é 1.5.16.
Responder1
requerimentoleva três parâmetros <search> <string> <cond>
.
<search>
: é o URL, por exemplo www.somedomain.com/please/rewrite/this/
<string>
: é a string de substituição, por exemplo /test
<cond>
: é para quaisquer condições especiais, ignore-o por enquanto.
No exemplo, a substituição fará o seguinte:
FROM: http://www.somedomain.com/please/rewrite/this/
TO: /test
O seguinte fará a substituição:
reqrep http://www.somedomain.com/please/rewrite/this/ http://www.somedomain.com/test
Se você deseja substituir o domínio ignorado, você precisa configurá-lo com regex:
reqrep ^([^\ :]*)\/please/rewrite/this/ \1\/test