Перезапись URL-адреса HAProxy выдает ошибку 400 Bad Request и NOSRV

Перезапись URL-адреса HAProxy выдает ошибку 400 Bad Request и NOSRV

Я пытаюсь переписать часть URI с помощью reqrep.

haproxy.cfg (оригинал)

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

Когда я это делаю, я вижу, что haproxy регистрирует то, что я ожидал. Обратите внимание, что я использую фиктивный сервер Python, который не может обрабатывать POST, поэтому 501 не имеет значения, мне нужен только тот факт, что запрос был маршрутизирован.

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

Я также вижу в журнале моего сервера следующее.

 "POST /please/rewrite/this/ HTTP/1.1" 501 -

haproxy.cdf (с 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

После добавления reqrep я получаю сообщения об ошибках от 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"

Видимо, мой запрос недействителен? Похоже, запрос не выходит из haproxy. Как мне узнать, во что переписан запрос? Я пробовал несколько разных команд reqrep с разными регулярными выражениями, и все они, похоже, выдают одну и ту же ошибку.

Моя версия haproxy — 1.5.16.

решение1

reqrepпринимает три параметра <search> <string> <cond>.

<search>: это URL, например www.somedomain.com/please/rewrite/this/

<string>: — это строка замены, например /test

<cond>: предназначен для особых условий, пока проигнорируйте его.

В этом примере замена выполнит следующее:

FROM: http://www.somedomain.com/please/rewrite/this/

TO: /test

Для замены будет выполнено следующее:

reqrep http://www.somedomain.com/please/rewrite/this/ http://www.somedomain.com/test

Если вы хотите заменить игнорирование домена, вам нужно задать его с помощью регулярного выражения:

reqrep ^([^\ :]*)\/please/rewrite/this/ \1\/test

Связанный контент