设为首页 收藏本站
查看: 1099|回复: 0

[经验分享] haproxy实现Discuz!动静分离

[复制链接]

尚未签到

发表于 2019-1-1 13:48:48 | 显示全部楼层 |阅读模式
  haproxy工作在用户空间(工作在第七层),能够识别应用层(http报文)的数据。所以,可以根据用户的请求类别的不同向不同服务群组调度的。也就是haproxy可以识别http报文的请求信息,做访问控制;
  比如:
  一组服务器处理动态资源:jsp、php
  一组服务器处理静态资源:如:用户请求的是图片等
  不让动态服务器响应静态资源。jsp或php页面都是由应用程序服务器执行之后来响应的。所以通常情况下,为了提高应用程序服务器处理动态页面的效率。通常要对用户的请求做动静分离。使用七层调度器把用户的请求调度到指定的服务器。还有静态资源是可以缓存的,这样还可以提高网站的响应速度。借助CDN网络,把静态资源缓存到用户的家门口。。。。。。
  haproxy通过acl来做访问控制的。格式如下:
  acl   [flags] [operator]  ...
      acl列表名称 测试标准    标志位   测试条件表达式  一、配置文件如下:

frontend main
    bind :80
    acl  url_static  path_beg  -i /static  /images -----> 使用acl关健字定义访问控制列表:url_static.匹配该访问列表的条件是:用户请求的url是以:/static 或 /images 开头的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  访问测试:
  1、查看动态页面由哪组服务器响应的?

  


  说明:
  从上图可以看出,动态页面由webservers这组服务器响应的。
  2、查看静态页面由哪组服务器响应?
再查看

  

  

说明:

  从上图知道,用户请求的URL以.jpg或.png或.js,都被haproxy调度到 static这组服务器
  2、查看用户请求js模式表,haproxy是否也把该请求调度到static服务器组
说明:

  从http报文分析,用户请求js样式表属于向服务发起动态请求,所以不应该把该请求定向到static服务器组。所以要进行haproxy的acl进行修改。
  二、修改haproxy的配置文件
frontend main
    bind :80
    acl  url_static  path_beg  -i /static/images  
    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  访问测试
  1、查看用户请求js
2、查看请求图片资源

再查看

再查看


  说明:

  通过上述修改后,已经能够实现动静分离了
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-658315-1-1.html 上篇帖子: Linux集群之haproxy简介及应用 下篇帖子: haproxy配置地址重定向
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表