La reescritura de URL de HAProxy genera 400 solicitudes incorrectas y NOSRV

La reescritura de URL de HAProxy genera 400 solicitudes incorrectas y NOSRV

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

información relacionada