天天看點

haproxy學習之手機規則比對一、業務需要二、haproxy配置三、其他haproxy配置

現在根據業務的實際需要,有以下幾種不同的需求。如下:

所有通過手機端通路http.ilanni.com域名的話,全部轉發到http://www.ilanni.com這個位址,而pc端不受此限制。

如果手機端請求http.ilanni.com這個域名的url中,以docs或者manager這兩個關鍵詞開頭的話,把該請求轉發到後端的伺服器,而pc端不受此限制。

也就是說手機端通路具體的url位址的話,可以正常通路。如果是直接通路http.ilanni.com域名的話,直接把該請求轉發到http://www.ilanni.com這個位址。

下面根據不同的業務需求進行配置haproxy,如下。

要把所有的手機端請求轉到www.ilanni.com這個位址,需要我們首先把通路的終端比對出來,haproxy可以通過hdr_sub(user-agent)這個參數把手機端比對出來。

手機端比對出來後,我們就可以定義相應的規則,把手機端的請求轉發到www.ilanni.com這個位址了。

haproxy具體配置檔案如下:

global

log 127.0.0.1 local0

log 127.0.0.1 local1 notice

maxconn 4096

uid 188

gid 188

daemon

tune.ssl.default-dh-param 2048

defaults

log global

mode http

option httplog

option dontlognull

option http-server-close

option forwardfor except 127.0.0.1

option redispatch

retries 3

maxconn 2000

timeout http-request 10s

timeout queue 1m

timeout connect 10s

timeout client 1m

timeout server 1m

timeout http-keep-alive 10s

timeout check 10s

maxconn 3000

listen admin_stats

bind 0.0.0.0:1080

maxconn 10

stats refresh 30s

stats uri /stats

stats auth admin:admin

stats hide-version

frontend weblb

bind *:80

acl is_http hdr_beg(host) http.ilanni.com

acl ua hdr_sub(user-agent) -i android iphone

redirect prefix http://www.ilanni.com if ua

use_backend httpserver if is_http

backend httpserver

balance source

server web1 127.0.0.1:8080 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3

在以上配置檔案中,有以下兩行需要注意:

這兩行,第一行是第一個ua規則,該規則是判斷是否是手機端。

<b>注意:在此手機端,我們隻比對了安卓手機和iphone。</b>

第二行是跳轉規則,如果比對是手機端的話,那麼直接跳轉到http://www.ilanni.com這個位址。

如果是pc端的話,預設跳轉到httpserver這個後端伺服器組。

以上配置是一台伺服器對外隻提供一個域名通路的請求,如果有兩個域名的話,就要進行如下配置:

acl is_haproxy hdr_beg(host) haproxy.ilanni.com

redirect prefix http://www.ilanni.com if ua !is_haproxy

use_backend haproxyserver if ua is_haproxy

use_backend haproxyserver if is_haproxy

backend haproxyserver

server web1 127.0.0.1:7070 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3

現在我們來測試該跳轉功能,如下:

haproxy學習之手機規則比對一、業務需要二、haproxy配置三、其他haproxy配置

通過測試你會發現,在手機浏覽器中輸入http.ilanni.com會自動跳轉到http://www.ilanni.com這個位址。

根據手機端請求的url進行轉發的話,首先也是需要比對出手機端,然後定義url路徑規則。最後結合手機端和url路徑規則,進行跳轉。

haproxy具體配置檔案,如下:

acl is_docs url_beg /docs /manager

redirect prefix http://www.ilanni.com if ua !is_docs

use_backend httpserver if ua is_docs

在上述配置檔案中,需要以下幾行解釋下。

定義一個is_docs規則。如果url以/docs或者/manager開頭的,則全部屬于該規則。

這兩行首先是比對出手機端,然後如果是手機端通路,并且通路的不是is_docs規則的話,則直接跳轉到http://www.ilanni.com這個位址。

這條指令是,如果是手機端通路,并且通路的是is_docs規則的話,則直接跳轉到httpserver這個後端伺服器組。

根據url轉發配置完畢後,我們現在來測試。如下:

haproxy學習之手機規則比對一、業務需要二、haproxy配置三、其他haproxy配置

通過上圖,我們可以看到手機端通路http://http.ilanni.com/docs/這個連接配接的話,是可以直接通路的。

在前面我們講解了有關手機的相關配置,在實際的生産環境中,有時候我們會碰到一些奇奇怪怪的要求。

要求所有手機端通路的http.ilanni.com,轉到指定的頁面。

haproxy主要配置檔案如下:

redirect prefix http://www.ilanni.com/?p=10624 if ua

以上配置是所有手機端通路的,都跳轉到http://www.ilanni.com/?p=10624這個頁面。測試如下:

haproxy學習之手機規則比對一、業務需要二、haproxy配置三、其他haproxy配置

通過上圖,我們可以看到手機端的通路确實跳轉到了我們指定的頁面。

類似這樣的要求,一般會在更新公司相關業務時提出,對公司的公網ip可以正常,但是外部通路時,跳轉到指定的維護頁面。

這個我們可以根據源ip位址進行比對,在此就不進行詳細的講解了。

haproxy學習之手機規則比對一、業務需要二、haproxy配置三、其他haproxy配置

通過上圖,我們可以看到手機端通路http://http.ilanni.com/manager/status這個連接配接的話,是可以直接通路的。

haproxy學習之手機規則比對一、業務需要二、haproxy配置三、其他haproxy配置

通過上圖,我們可以看到如果手機端通路的不是is_docs這個規則中定義的url話,則會全部跳轉到http://www.ilanni.com這個位址的。

繼續閱讀