2015-10-15 108 views
3

隨着HA代理1.5我需要從 http://main.domain.com/my-foo 重寫URL到 http://othersite.com:8081/other-barHAProxy的和reqrep路徑與重定向配置

這裏重寫是我的嘗試:

frontend ft_def 
    bind :80          
    mode http             
    acl has_special_uri path_beg /my-foo 
    use_backend def if has_special_uri 
    default_backend def 

backend def 
    mode http          
    option forwardfor      
    reqirep ^([^\ ]*\)/my-foo(.*) \1/other-bar\2 
    server myserver othersite.com:8081 

這工作: URL
http://main.domain.com/my-foo/home.html
變成
http://othersite.com:8081/other-bar/home.html

並在瀏覽器中出現初始URL http://main.domain.com/my-foo/home.html

正是我所需要的:它對用戶來說是完全透明的。 但重定向不起作用:當我點擊網頁的URL的鏈接然後
http://main.domain.com/other-bar/page2.html

我想獲得http://main.domain.com/my-foo/page2.html,而不是出現在瀏覽器中。

HA Proxy有可能嗎?我嘗試了很多配置但沒有成功。 謝謝!

回答

2

如果你在談論HTML中的鏈接(而不是像Location:頭文件中的重定向)...... HAProxy 1.5將無法修改這些鏈接。

根據您所描述的,頁面/other-bar/page1.html在內部鏈接到<a href="/other-bar/page2.html">時,它確實應鏈接到<a href="page2.html">。你需要相對的鏈接才能透明地工作......否則,鏈中的組件「X」必須能夠在響應主體中動態修改鏈接,但只有鏈接,當然,因爲你不想盲目地使用正則表達式 - 將頁面內容作爲一個整體來替換......並且HAProxy 1.5不會嵌入響應體,所以它不能完成組件「X」的角色。

HAProxy 1.6 可能能夠做到這一點,與Lua,但這可能......如果它可以做到這一點,它不可能是在你的表現水平通常期望來自HAProxy,因爲在Lua中清理html可能會是一個相對昂貴的命題。