2016-12-14 61 views
0

我在HA代理中配置了以下規則。我得到當我試着打http://haproxy_ip/serviceHA代理規則 - 404找不到

frontend http-in 
    bind 10.254.23.225:80 
    acl has_service path_beg /service 
    use_backend service_server if has_service 

backend service_server 
    balance roundrobin 
    cookie SERVERID insert 
    option httpchk HEAD /check.txt HTTP/1.0 
    option httpclose 
    option forwardfor 
    server server1 192.168.2.1:9000 cookie server1 check 
+1

如果直接調用'http://192.168.2.1:9000/service',你有問題嗎?如果是這樣,你的後端不能正確處理你的請求。 –

+0

後端本身不具有/服務。我使用haproxy在url中擁有虛擬路徑。 – Umapathy

+0

感謝它與reqrep ^([^ \] * \ /)service[/]?(.*)\ 1 \ 2 – Umapathy

回答

0

後端犯規本身有/服務404未找到。我使用haproxy在url中擁有虛擬路徑。

當前的配置,/service/test.txt會觸發ACL has_service並將派/service/test.txt到後端,在不改變網址。

如果你想(在前端代理/service/在後端)更改URL,你應該加入下面一行在你的後臺:

reqrep ^([^\ ]*)\ /service(.*) \1\ \2 

這將從代理請求刪除/service

編輯:

HAProxy的將不寫HTML輸出:你的資產將無法獲得領先/service/,將無法正確送達。

代理請求時,保留相同路徑比較容易:代理///myapp//myapp/例如。如果代理/a/b/c,代理本身將需要重寫響應:<img src="https://stackoverflow.com/a/test.png">需要更改爲<img src="/b/c/test.png">。或者worse<img src="../c/test.png" />。在html,js和css中也添加相對引用。我不確定它是否適用於HAProxy。

如果您可以更改應用程序並將其部署在/service/上,您將避免很多的問題。使用其他虛擬主機(例如service.yourdomain.com)也可以解決這個問題。

如果不是這樣,我不知道是HAProxy的正確的工具,在這裏,我想嘗試的Apache 2.4 mod_proxy_html(但並不想真的很難在/service/部署應用之前)。

+0

)合作您是對的!但是,Web應用程序具有不會被重定向到後端規則的css,images和js文件。因爲/服務在第一次重定向後不會出現。如何保持ip並在同一會話中使用它進行重定向? – Umapathy

+0

查看我的更新:處理後端中的'/ services /'(如果可能)將是最簡單的解決方案。 –