我是 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]
表達式中刪除。