
Ich versuche, einen Teil einer URI mit reqrep neu zu schreiben.
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
Wenn ich das mache, sehe ich das erwartete Haproxy-Protokoll. Beachten Sie, dass ich einen Dummy-Python-Server verwende, der POST nicht verarbeiten kann. Daher ist die 501 kein Problem. Ich suche nur nach der Tatsache, dass die Anfrage weitergeleitet wurde.
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
Ich sehe in meinem Serverprotokoll auch Folgendes.
"POST /please/rewrite/this/ HTTP/1.1" 501 -
haproxy.cdf (mit 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
Mit dem hinzugefügten reqrep erhalte ich Fehlermeldungen von 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"
Anscheinend ist meine Anfrage ungültig? Es sieht so aus, als ob die Anfrage es nicht aus Haproxy heraus schafft. Wie kann ich sehen, in was die Anfrage umgeschrieben wird? Ich habe mehrere verschiedene Reqrep-Befehle mit unterschiedlichen regulären Ausdrücken ausprobiert und alle scheinen mir denselben Fehler zu liefern.
Meine Haproxy-Version ist 1.5.16.
Antwort1
erforderlichbenötigt drei Parameter <search> <string> <cond>
.
<search>
: ist die URL, zum Beispiel www.somedomain.com/please/rewrite/this/
<string>
: ist die Ersetzungszeichenfolge, zum Beispiel /test
<cond>
: steht für etwaige Sonderbedingungen, ignorieren Sie es vorerst.
Im Beispiel bewirkt das Ersetzen Folgendes:
FROM: http://www.somedomain.com/please/rewrite/this/
TO: /test
Der Austausch erfolgt folgendermaßen:
reqrep http://www.somedomain.com/please/rewrite/this/ http://www.somedomain.com/test
Wenn Sie das Ignorieren der Domäne ersetzen möchten, müssen Sie sie mit einem regulären Ausdruck festlegen:
reqrep ^([^\ :]*)\/please/rewrite/this/ \1\/test