Haproxy schimba o parte din url (Administrarea sistemului, Haproxy)

Hugo Marques a intrebat.

Am o aplicație care a fost redenumită și vreau ca Haproxy să redirecționeze către calea corectă, păstrând în același timp parametrii de cerere

Aceasta este ceea ce am:

acl old_name path_dir -i /old_name
   http-request set-path /new_name/%[query] if old_name

Vreau să se schimbe de la

www.site.com/old_name/Default.aspx?Id=123

la

www.site.com/new_name/Default.aspx?Id=123 but this is not working. 

Comentarii

  • faptul că acest lucru se întâmplă la IISM sau MIT nu este relevant și face întrebarea dvs. mai greu de înțeles. Și ce vrei să spui prin „pentru a avea controlul versiunilor” ? –  > Por Flint.
  • Aveți dreptate, nu este foarte relevant pentru întrebare. Prin control al versiunii, mă refer la faptul că poți vedea efectiv cu un commit că ai adăugat o redirecționare pentru o adresă URL în loc să fie ascunsă într-o configurație din IISM. –  > Por Hugo Marques.
3 răspunsuri
Flint

Cu HAProxy 1.5 : utilizați un antet temporar pentru a construi o nouă cale din cea existentă în cerere și apoi efectuați direct o redirecționare

# Clean the request and remove any existing header named X-Rewrite
http-request del-header X-REWRITE

# Copy the full request URL into X-Rewrite unchanged
http-request add-header X-REWRITE %[url] if { path_beg /old_path }

# Change the X-REWRITE header to contain out new path
http-request replace-header X-REWRITE ^/old_path(/.*)?$ /new_path1 if { hdr_cnt(X-REWRITE) gt 0 }

# Perform the 301 redirect
http-request redirect code 301 location http://%[hdr(host)]%[hdr(X-REWRITE)] if { hdr_cnt(X-REWRITE) gt 0 }

În HAProxy 1.6, utilizați filtrul regsub

http-request redirect code 301 location http://%[hdr(host)]%[url,regsub(^/old_path,/new_path,)] if { path_beg /old_path }

sursa printre alte fragmente de configurare utile

Mai multe informații sunt disponibile în secțiunea documentația HAProxy pentru cuvântul cheie regsub.

Comentarii

  • @flint Atunci când copiați textual lucruri pe care le găsiți pe internet, ar trebui cel puțin să adăugați o mențiune de atribuire la sursa (care ar fi eu în acest caz). –  > Por Holger Just.
  • M-ai prins @Holger. Dar de obicei o fac. Mulțumesc cu întârziere. –  > Por Flint.
  • O soluție minunată, mulțumesc! –  > Por napolux.
Flint

Sunteți confuz redirecționarea url-ului cu rescrierea url către backend.

În cazul în care doriți să rescrieți, atunci, în conformitate cu documentația haproxy 1.6 :

  • „set-path” rescrie calea cererii cu rezultatul evaluării șirului de format . Șirul de interogare, dacă există, este lăsat intact.

Așadar, configurația corectă în acest caz ar fi :

acl old_name path_dir -i /old_name
http-request set-path /new_name if old_name

La redirecționarea utilizatorului :

redirect location /new_name if old_name

Comentarii

  • Da, am fost un pic confuz cu aceste două. Problema este că vreau să redirecționez utilizatorul către /noua_nume/Default.aspx?Id=123 și să păstrez partea „Default.aspx?Id=123”. Efectuarea unei redirecționări așa cum ați menționat dvs. redirecționează doar către /new_name în loc de /new_name/Default.aspx?Id=123. –  > Por Hugo Marques.
Daniel Sá

Pentru oricine încearcă să facă modificări de la uri la REST API, nu folosiți locația de redirecționare http-request deoarece datele de antet se pierd. Utilizați http-request set-uri.

http-request set-uri% [url,regsub(^/old,/new,)] if { path_beg /old }

Tags: