haproxy实现Discuz!动静分离

简介:

     haproxy工作在用户空间(工作在第七层),能够识别应用层(http报文)的数据。所以,可以根据用户的请求类别的不同向不同服务群组调度的。也就是haproxy可以识别http报文的请求信息,做访问控制;

比如:

    一组服务器处理动态资源:jsp、php

    一组服务器处理静态资源:如:用户请求的是图片等

不让动态服务器响应静态资源。jsp或php页面都是由应用程序服务器执行之后来响应的。所以通常情况下,为了提高应用程序服务器处理动态页面的效率。通常要对用户的请求做动静分离。使用七层调度器把用户的请求调度到指定的服务器。还有静态资源是可以缓存的,这样还可以提高网站的响应速度。借助CDN网络,把静态资源缓存到用户的家门口。。。。。。

haproxy通过acl来做访问控制的。格式如下:

1
2
   acl <aclname> <criterion> [flags] [operator] <value> ... 
       acl列表名称 测试标准    标志位   测试条件表达式

一、配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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、查看动态页面由哪组服务器响应的?

wKiom1QgwgXg0bnpAAUVSDZKPZw734.jpg


wKiom1QgxImDVYbuAAOj91KqcE8526.jpg

说明:

    从上图可以看出,动态页面由webservers这组服务器响应的。

2、查看静态页面由哪组服务器响应?

wKiom1QgwqfBgM-zAAUL8WKm8-g893.jpg再查看 



wKiom1Qgwt-BtEp9AAM1pWg5THw499.jpg说明:

    从上图知道,用户请求的URL以.jpg或.png或.js,都被haproxy调度到 static这组服务器

2、查看用户请求js模式表,haproxy是否也把该请求调度到static服务器组

wKiom1QgxcHRivX_AASI-8oF6Kw995.jpg说明:

    从http报文分析,用户请求js样式表属于向服务发起动态请求,所以不应该把该请求定向到static服务器组。所以要进行haproxy的acl进行修改。

二、修改haproxy的配置文件

1
2
3
4
5
6
7
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

wKiom1QgxsTgZ3ODAANrAxyEto4507.jpg2、查看请求图片资源

wKiom1QgxxHyNf8DAARHOmx-Jes787.jpg再查看

wKiom1QgxziSJe6eAAMsnGMAyk4758.jpg再查看

wKiom1Qgx1rg4HybAAMizyBR5PI352.jpg

说明:

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





     本文转自成长的小虫 51CTO博客,原文链接:http://blog.51cto.com/9528du/1557181,如需转载请自行联系原作者





相关实践学习
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
1月前
|
运维 前端开发 应用服务中间件
LNMP详解(八)——Nginx动静分离实战配置
LNMP详解(八)——Nginx动静分离实战配置
23 1
|
4月前
|
缓存 应用服务中间件 nginx
【Nginx】动静分离
【1月更文挑战第25天】【Nginx】动静分离
|
5月前
|
关系型数据库 MySQL 应用服务中间件
LNMT与动静分离
LNMT(Linux + Nginx + MySQL + Tomcat)是一种常见的Web应用架构,它由Linux操作系统作为基础,使用Nginx作为反向代理服务器和静态资源服务器,MySQL作为数据库,Tomcat作为应用服务器。
40 0
|
7月前
|
前端开发 JavaScript 应用服务中间件
Nginx之动静分离解读
Nginx之动静分离解读
|
11月前
|
网络协议 关系型数据库 MySQL
动静分离LNMP
动静分离LNMP
|
前端开发 JavaScript 应用服务中间件
nginx反向代理目录及动静分离公羊seo
目的:域名aa.com访问tomcat项目时,实现指定到固定目录下,直接访问aa.com时报500错误 架构:nginx+tomcat 各一台
146 0
nginx反向代理目录及动静分离公羊seo
|
存储 安全 Java
nginx+vsftp搭建图片服务器
在分布式架构中,往往会有多个tomcat,然后你上传的图片只是在其中的某一个tomcat,你访问时是由集群的tomcat随机提供服务。当你访问的tomcat是有图片的那个时,图片能正常显示,如果恰巧是那个没有图片的tomcat时,图片就不能正常显示。这就完成了访问同一个图片,可能你刷新一次可以访问,再刷新一次图片就访问不到了。这时,我们就需要一个服务器用来专门存储图片,一般我们都用nginx。
nginx+vsftp搭建图片服务器
|
负载均衡 中间件 应用服务中间件
Nginx动静分离详解以及配置
1.Nginx动静分离概念 动静分离,通过中间件将动态请求和静态请求进行分离,分离资源,减少不必要的请求消耗,减少请求延时。 好处:动静分离后,即使动态服务不可用,但静态资源不会受到影响 通过中间件可以将动态请求和静态请求进行分离
304 0
Nginx动静分离详解以及配置
|
Web App开发 JavaScript 应用服务中间件
Nginx实现动静分离
利用Nginx实现简单动静分离
1536 0
|
前端开发 JavaScript Unix
haproxy 动静分离实例
code from www.361way.com global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.
803 0