
Я пытаюсь переписать часть 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