haproxy工做在用戶空間(工做在第七層),可以識別應用層(http報文)的數據。因此,能夠根據用戶的請求類別的不一樣向不一樣服務羣組調度的。也就是haproxy能夠識別http報文的請求信息,作訪問控制;php
好比:web
一組服務器處理動態資源:jsp、php後端
一組服務器處理靜態資源:如:用戶請求的是圖片等緩存
不讓動態服務器響應靜態資源。jsp或php頁面都是由應用程序服務器執行以後來響應的。因此一般狀況下,爲了提升應用程序服務器處理動態頁面的效率。一般要對用戶的請求作動靜分離。使用七層調度器把用戶的請求調度到指定的服務器。還有靜態資源是能夠緩存的,這樣還能夠提升網站的響應速度。藉助CDN網絡,把靜態資源緩存到用戶的家門口。。。。。。bash
haproxy經過acl來作訪問控制的。格式以下:服務器
acl <aclname> <criterion> [flags] [operator] <value> ... acl列表名稱 測試標準 標誌位 測試條件表達式
1、配置文件以下:
cookie
frontend main bind :80 acl url_static path_beg -i /static /p_w_picpaths -----> 使用acl關健字定義訪問控制列表:url_static.匹配該訪問列表的條件是:用戶請求的url是以:/static 或 /p_w_picpaths 開頭的url. acl url_static path_end -i .jpg .gif .png ------> 訪問控制列表url_static的規則是:從用戶請求資源的url的後面作字符匹配,匹配規則是:以.jpg 或 .gif 或 .png 結尾的url都被匹配到。 use_backend static if url_static ------->對用戶的請求作acl訪問控制,若是符合 url_static 定義的訪問控制規則的話,就把這些請求調度到 static 標識的上游服務中。 default_backend webservers ------> 沒有被 url_static 訪問控制列表匹配到的請求都被調度到 webservers標識的上游服務器。 option forwardfor except 127.0.0.0/8 backend webservers ------> 定義上游服務器 webservers 來響應用戶的動態請求 balance roundrobin rspadd X-Via:app ----> 自定義一個響應首部信息。查看http報文就能夠知道該請求是由那組後端服務器響應的。 cookie webserver insert nocache option httpchk server s1 172.16.0.99 cookie s1 check port 80 weight 1 server b1 127.0.0.1:8080 backup stats enable --------> haproxy 的狀態頁 stats hide-version stats uri /haproxy?stats stats scope . stats realm HAPorxy\ Statistics stats auth admin:admin stats admin if TRUE backend static ---------> 定義上游服務器 static 來響應用戶的靜態請求 balance roundrobin rspadd X-Via:static -----> 自定義一個響應首部信息。查看http報文就能夠知道該請求是由那組後端服務器響應的。 option httpchk server s2 172.16.0.88 cookie s2 check port 80 weight 1
訪問測試:網絡
一、查看動態頁面由哪組服務器響應的?app
說明:frontend
從上圖能夠看出,動態頁面由webservers這組服務器響應的。
二、查看靜態頁面由哪組服務器響應?
從上圖知道,用戶請求的URL以.jpg或.png或.js,都被haproxy調度到 static這組服務器
二、查看用戶請求js模式表,haproxy是否也把該請求調度到static服務器組
從http報文分析,用戶請求js樣式表屬於向服務發起動態請求,因此不該該把該請求定向到static服務器組。因此要進行haproxy的acl進行修改。
2、修改haproxy的配置文件
frontend main bind :80 acl url_static path_beg -i /static/p_w_picpaths acl url_static path_end -i .jpg .gif .png use_backend static if url_static default_backend webservers option forwardfor except 127.0.0.0/8
訪問測試
一、查看用戶請求js
說明:
經過上述修改後,已經可以實現動靜分離了