A reescrita de URL HAProxy fornece 400 solicitações incorretas e NOSRV

A reescrita de URL HAProxy fornece 400 solicitações incorretas e NOSRV

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

informação relacionada