這是我能想出:
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:8080
和localhost:8081
與你的情況的正確位置。
說明
首先,在指定的HTTP前端有兩個ACL(訪問控制列表),該測試是什麼在URL(因此關鍵字url_beg
)的開始。這些規則的結果是,如果網址以/alpha
開頭,則稱爲alpha
的變量設置爲true,然後對於beta版則相同。
接着在前端,有如果如果beta
設置爲true可變alpha
被設置爲真,並且在同一對backend_beta
這將將請求定向到backend_alpha
2個use_backend
命令。
因此,前端負責採取URL並決定使用哪個服務器。
兩個後端(backend_alpha
和backend_beta
)除了文本alpha
和beta
以及各個服務器的位置幾乎相同外。後端中的第一個命令是您指出的reqrep
命令。 reqrep
命令執行的操作是使用URL,使用正則表達式搜索特定部分,然後用其他東西替換它。在這種情況下,我們有這個網址:
http://example.com/alpha
在reqrep command的第一部分:
^([^\ ]*\ /)
需要http://example.com/
並將其存儲在一個名爲\1
alpha
然後變量匹配與alpha
在給定的網址
[/]?(.*)
將alpha
之後的所有內容都存儲在一個名爲的變量中\2
(在這種情況下\2
就等於沒有,因爲其中沒有alpha
後的網址)
然後reqrep
命令的第二部分說採取的\1
(http://example.com/
)中的內容,並添加path/index.cgi
到底,使新的url發送到服務器。
作爲alpha和beta url的結果,發送到服務器的結果url是http://example.com/path/index.cgi
。
最後,server
命令將請求發送到相應的服務器。
我想指出,我不是複雜的正則表達式部分的專家(我覺得它有點混亂),但希望其他知道更多一點的人可以更詳細地解釋它或糾正我我錯了。
我希望幫助:)
你能告訴我如何找到用戶是否只輸入了wwwdomaincom。我無法弄清楚。檢查'path_beg -i'因爲它的出現而不起作用,即使瀏覽器地址欄中沒有顯示,實際上出現在wwwdomaincom/HTTP 1.1中,因此檢查path_beg的空白不起作用 –
Hi @AllenKing 。或許你最好創造我們自己的問題,而不是在這裏問。這樣,其他可能知道答案的人可以提供幫助。 – JamesStewy