2016-10-10 51 views
0

我對haproxy的知識極其低下。在測試出的配置中Haproxy - 對S3託管站點的轉發請求

S3託管網站(路線53別名) - content.mydomain.com
網址登陸HAProxy的 - www.mydomain.com/getfiles/

是否有可能重新路由重定向WWW .mydomain.com/getfiles /到content.mydomain.com(s3託管網站)。

我能夠重定向到與下面的同一臺服務器上運行的其他應用程序所提到的配置

acl display-s3-content path_beg /getfiles/ 
    use_backend my-content if display-s3-content 

backend my-content 
    reqrep ^([^\ ]*)\ (.*) \1\ /path/\2 
    server test www.mycomain.com:1936 

,但是當我試圖把它重定向到S3託管網站,這是行不通的。下面是不工作配置的後端

reqrep ^([^\ ]*)\ (.*) \1\ /path/\2 
    server test1 content.mydomain.com 

謝謝!

+0

這不是「重定向」,而是「轉發」。 –

+0

因此,如果請求以'/ getfiles /'開頭的路徑進入,您希望將該請求發送到存儲桶。我可以發佈一個解釋如何完成的答案,但首先,我需要知道你想在路徑的開始處使用'/ getfiles /'來做什麼,以便我們在桶中尋找正確的路徑。去掉它?用其他東西替換它?另外,什麼版本的HAProxy? –

+0

嘿邁克爾,我會很高興知道它的正確方法,haproxy - 1.5.2,我相信將需要刪除它,因爲我猜s3目前正在拋出301,因爲它必須是content.mydomain.com才能顯示內容。謝謝! –

回答

3

正如你在評論中指出,這個工程:

reqirep ^Host: Host:\ content.mydomain.com 

的想法是對Host頭設置爲S3預計值。

一個稍微更簡潔的方法是這樣的:

http-request set-header Host content.mydomain.com 

我說,因爲它採用的是較新的/更好/更安全的頭處理機制「更好」,但它是從根本上實現相同的目的:改變請求頭到目標服務器(S3)的期望值。使用http-request的方法更安全/更清晰,因爲它對於如何處理請求更「聰明」 - 使用req[i]rep比使用http-request完全中斷協議要容易得多。

最初,你問到/getfiles/test.jpg映射到/test.jpg桶中。這重寫是HAProxy的1.6及更高版本很簡單,清洗容易:

http-request set-path %[path,regsub(^/getfiles,)] 

...但在1.5你必須使用reqirep因爲regsub(正則表達式替換)轉換器不可用:

reqirep ^([^\ :]+)\ +/getfiles(.*) \1\ \2 

這與請求中的GETHEAD,POST等)行匹配,並從路徑中刪除多餘的/getfiles。在排除模式中包含:可防止其匹配任何其他標題。在向S3發送請求之前,可以使用類似的模式來添加前綴(例如發佈版本等)。

相關問題