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

说明:

   经过上述修改后,已经可以实现动静分离了

相关文章
相关标签/搜索