haproxy實現Discuz!動靜分離

     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

wKiom1QgwgXg0bnpAAUVSDZKPZw734.jpg


wKiom1QgxImDVYbuAAOj91KqcE8526.jpg

說明:frontend

    從上圖能夠看出,動態頁面由webservers這組服務器響應的。

二、查看靜態頁面由哪組服務器響應?

wKiom1QgwqfBgM-zAAUL8WKm8-g893.jpg再查看 



wKiom1Qgwt-BtEp9AAM1pWg5THw499.jpg說明:

    從上圖知道,用戶請求的URL以.jpg或.png或.js,都被haproxy調度到 static這組服務器

二、查看用戶請求js模式表,haproxy是否也把該請求調度到static服務器組

wKiom1QgxcHRivX_AASI-8oF6Kw995.jpg說明:

    從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

wKiom1QgxsTgZ3ODAANrAxyEto4507.jpg二、查看請求圖片資源

wKiom1QgxxHyNf8DAARHOmx-Jes787.jpg再查看

wKiom1QgxziSJe6eAAMsnGMAyk4758.jpg再查看

wKiom1Qgx1rg4HybAAMizyBR5PI352.jpg

說明:

   經過上述修改後,已經可以實現動靜分離了

相關文章
相關標籤/搜索