2015-05-15 55 views
1

請忍讓我,因爲我本質上不是編碼員。HAProxy path to host/path/

這是我試圖使用HAproxy實現的,但經過幾個小時的檢查後,我無法使其工作。

  1. domain.com/alpha
  2. domain.com/beta

  1. domain.com/alpha將指向backend1 /路徑/索引.cgi
  2. domain.com/beta將指向backend2/path/index.cgi

我試過了,多種方式但無濟於事,我讀了關於重寫/重定向,但不知何故它讓我非常困惑。例如「reqrep」

通過使用alpha.domain.com指向後端1 /路徑按預期工作,但由於證書限制,我需要內聯路徑。

謝謝你,如果可能的話解釋一下它是如何工作的以及什麼是正確的術語(例如:重寫,重定向),以便我可以對此有所瞭解,並且我將從此處前進。

回答

10

這是我能想出:

frontend HTTP 
    mode http 
    bind *:80 

    acl alpha url_beg /alpha 
    acl beta url_beg /beta 
    use_backend backend_alpha if alpha 
    use_backend backend_beta if beta 

backend backend_alpha 
    reqrep ^([^\ ]*\ /)alpha[/]?(.*)  \1path/index.cgi 
    server server_alpha localhost:8080 

backend backend_beta 
    reqrep ^([^\ ]*\ /)beta[/]?(.*)  \1path/index.cgi 
    server server_beta localhost:8081 

很明顯,你會再更換localhost:8080localhost:8081與你的情況的正確位置。

說明

首先,在指定的HTTP前端有兩個ACL(訪問控制列表),該測試是什麼在URL(因此關鍵字url_beg)的開始。這些規則的結果是,如果網址以/alpha開頭,則稱爲alpha的變量設置爲true,然後對於beta版則相同。

接着在前端,有如果如果beta設置爲true可變alpha被設置爲真,並且在同一對backend_beta這將將請求定向到backend_alpha 2個use_backend命令。

因此,前端負責採取URL並決定使用哪個服務器。

兩個後端(backend_alphabackend_beta)除了文本alphabeta以及各個服務器的位置幾乎相同外。後端中的第一個命令是您指出的reqrep命令。 reqrep命令執行的操作是使用URL,使用正則表達式搜索特定部分,然後用其他東西替換它。在這種情況下,我們有這個網址:

http://example.com/alpha 

reqrep command的第一部分:

  • ^([^\ ]*\ /)需要http://example.com/並將其存儲在一個名爲\1
  • alpha然後變量匹配與alpha在給定的網址
  • [/]?(.*)alpha之後的所有內容都存儲在一個名爲的變量中\2(在這種情況下\2就等於沒有,因爲其中沒有alpha後的網址)

然後reqrep命令的第二部分說採取的\1http://example.com/)中的內容,並添加path/index.cgi到底,使新的url發送到服務器。

作爲alpha和beta url的結果,發送到服務器的結果url是http://example.com/path/index.cgi

最後,server命令將請求發送到相應的服務器。

我想指出,我不是複雜的正則表達式部分的專家(我覺得它有點混亂),但希望其他知道更多一點的人可以更詳細地解釋它或糾正我我錯了。

我希望幫助:)

+0

你能告訴我如何找到用戶是否只輸入了wwwdomaincom。我無法弄清楚。檢查'path_beg -i'因爲它的出現而不起作用,即使瀏覽器地址欄中沒有顯示,實際上出現在wwwdomaincom/HTTP 1.1中,因此檢查path_beg的空白不起作用 –

+0

Hi @AllenKing 。或許你最好創造我們自己的問題,而不是在這裏問。這樣,其他可能知道答案的人可以提供幫助。 – JamesStewy

相關問題