2017-05-08 128 views
0

我一直在搜索互聯網的深度試圖讓HAProxy行爲,但我不知道它可以完成我想要的。HAproxy子目錄

我嘗試以下這一點:https://www.haproxy.com/blog/howto-write-apache-proxypass-rules-in-haproxy/

這裏是我的情況:我有一個運行在端口8999 APP1當我去https://PUBLIC-IP-ADDRESS/app1 HAProxy的操作應APP1的根在http://backend-ip:8999/一個VM。

我面臨的問題是我可以讓HAProxy代理初始連接,但所有後續請求都轉到默認後端服務器的根目錄。

frontend www-https 
    bind *:8989 ssl crt /ssl/server.pem 
    log global 
    option httplog 
    reqadd X-Forwarded-Proto:\ https 
    rspadd Strict-Transport-Security:\ max-age=31536000;\ includeSubDomains 
    acl app1 path_beg -i /app1 /app1/ 
    use_backend www-app1 if app1 
    default_backend www-backend 

backend app1 
    option http-server-close 
    option forwardfor 
    reqirep [\:])\ /app1/(.) \1\ /\2 
    acl hdr_location res.hdr(Location) -m found 
    rspirep Location:\ (https?://Public-IP-ADDRESS(:[0-9]+)?)?(/.*) Location:\ /app1\3 if hdr_location 
    server app1 bk.IP-ADDRESS:8999 check 

/app1/現在的作品,但所有的鏈接都指向/。所以點擊任何地方都會讓我回到https://PUBLIC-IP-ADDRESS

任何幫助,非常感謝。

回答

0

resirep只允許修改標題和請求行。

它的新版本1.6或更高版本,它可能可以(在有限的方式)利用LUA腳本...但目前沒有通用的(成功的)解決方案(如參考http://www.serverphorums.com/read.php?10,1322511)。

https://serverfault.com/questions/789743/possibility-of-rewriting-response-bodies-in-different-webservers-nginx-apache中的答案似乎是最新的。

也正式郵件列表 - https://www.mail-archive.com/[email protected]/msg25215.html,沒有幻想。

還有很多缺陷 - 很多正則表達式(或一個非常複雜的)來處理所有相對(包括../)和絕對變化。

解決方案,無需重寫:(?X-轉發路徑)

  1. 讓應用可在/ APP1 - - 如果你是在它的控制
  2. 有點像上述基於一些頭設置<base>從HAProxy的
  3. 放棄與/app1路徑和使用子域名(我會選擇這一項)
+0

我使用一個子域而非子目錄中的完全一致,但不幸的是牛逼帽子沒有選擇。所以我放棄了HAproxy並讓它與Apache一起工作。還是)感謝你的建議。 – Justin