HAProxy 1.7 使用映射檔案重定向/重寫特定域

HAProxy 1.7 使用映射檔案重定向/重寫特定域

我是 HAProxy 的新手,我想在映射檔案定義的網域中重定向請求。一個簡短的範例:在我的redirect.map檔案中:

abc.com xyz.com
def.ru idk.com

因此,如果使用者向網域 abc.com 或 def.ru 發送請求,他將被重新導向到定義的網域。但如果他要求 asd.com,則不應進行重定向。我的目標是在地圖檔案中定義這些重定向,以便輕鬆更改。

接下來我想對 uri 重寫做同樣的事情。就像是:

http-request set-uri X if Y from rewrite.map

所以我的地圖檔案將如下所示:

 (my X variable)    (my Y variable)
/abc/def/specific  www.mydomain.com/specific

我是否有機會使用 HAProxy 來做到這一點?

答案1

http-request redirect location https://%[hdr(host),map(/etc/haproxy/rewrite.map)]%[capture.req.uri] code 301 if { hdr(host),map(/etc/haproxy/rewrite.map) -i -m found }

hdr(x)拿來讀取請求頭x並傳回找到的值。 (從技術上講,它讀取該標頭的最後一次出現,但該Host標頭應該只出現一次。)

map轉換器取得其前面的值(與 相連,),在映射表中尋找並傳回結果。

如果沒有找到匹配項,則不會傳回任何結果,因此-m found測試不會傳回結果,且規則不符。 (-i使查找不區分大小寫)。

如果規則匹配,我們會Location使用文字字串https://(如果合適的話將其更改為http)+映射檔案中重寫的主機名稱+原始請求URI(以前導開頭/並包含路徑)為回應頭建立新的URL和查詢字串,保留整個請求URI。

如果您不想保留原始 URI,而只是將所有內容傳送到目標網站的主頁,請從%[capture.req.uri]表達式中刪除。

相關內容