haproxy实现Discuz!动静分离
haproxy工作在用户空间(工作在第七层),能够识别应用层(http报文)的数据。所以,可以根据用户的请求类别的不同向不同服务群组调度的。也就是haproxy可以识别http报文的请求信息,做访问控制;比如:
一组服务器处理动态资源:jsp、php
一组服务器处理静态资源:如:用户请求的是图片等
不让动态服务器响应静态资源。jsp或php页面都是由应用程序服务器执行之后来响应的。所以通常情况下,为了提高应用程序服务器处理动态页面的效率。通常要对用户的请求做动静分离。使用七层调度器把用户的请求调度到指定的服务器。还有静态资源是可以缓存的,这样还可以提高网站的响应速度。借助CDN网络,把静态资源缓存到用户的家门口。。。。。。
haproxy通过acl来做访问控制的。格式如下:
acl ...
acl列表名称 测试标准 标志位 测试条件表达式 一、配置文件如下:
frontend main
bind :80
aclurl_staticpath_beg-i /static/images -----> 使用acl关健字定义访问控制列表:url_static.匹配该访问列表的条件是:用户请求的url是以:/static 或 /images 开头的url.
aclurl_staticpath_end-i .jpg .gif .png ------> 访问控制列表url_static的规则是:从用户请求资源的url的后面做字符匹配,匹配规则是:以.jpg 或 .gif 或 .png 结尾的url都被匹配到。
use_backend staticif url_static ------->对用户的请求做acl访问控制,如果符合 url_static 定义的访问控制规则的话,就把这些请求调度到 static 标识的上游服务中。
default_backend webservers ------> 没有被 url_static 访问控制列表匹配到的请求都被调度到 webservers标识的上游服务器。
option forwardforexcept 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 80weight 1
server b1 127.0.0.1:8080 backup
statsenable --------> haproxy 的状态页
statshide-version
statsuri /haproxy?stats
statsscope .
statsrealmHAPorxy\ Statistics
statsauth admin:admin
statsadminif TRUE
backendstatic ---------> 定义上游服务器 static 来响应用户的静态请求
balance roundrobin
rspadd X-Via:static -----> 自定义一个响应首部信息。查看http报文就可以知道该请求是由那组后端服务器响应的。
option httpchk
server s2 172.16.0.88 cookie s2 check port 80weight 1 访问测试:
1、查看动态页面由哪组服务器响应的?
http://s3.运维网.com/wyfs02/M02/49/F8/wKiom1QgwgXg0bnpAAUVSDZKPZw734.jpg
http://s3.运维网.com/wyfs02/M00/49/F8/wKiom1QgxImDVYbuAAOj91KqcE8526.jpg
说明:
从上图可以看出,动态页面由webservers这组服务器响应的。
2、查看静态页面由哪组服务器响应?
http://s3.运维网.com/wyfs02/M02/49/F8/wKiom1QgwqfBgM-zAAUL8WKm8-g893.jpg再查看
http://s3.运维网.com/wyfs02/M01/49/F8/wKiom1Qgwt-BtEp9AAM1pWg5THw499.jpg说明:
从上图知道,用户请求的URL以.jpg或.png或.js,都被haproxy调度到 static这组服务器
2、查看用户请求js模式表,haproxy是否也把该请求调度到static服务器组
http://s3.运维网.com/wyfs02/M02/49/F8/wKiom1QgxcHRivX_AASI-8oF6Kw995.jpg说明:
从http报文分析,用户请求js样式表属于向服务发起动态请求,所以不应该把该请求定向到static服务器组。所以要进行haproxy的acl进行修改。
二、修改haproxy的配置文件
frontend main
bind :80
aclurl_staticpath_beg-i /static/images
aclurl_staticpath_end-i .jpg .gif .png
use_backend staticif url_static
default_backend webservers
option forwardforexcept 127.0.0.0/8 访问测试
1、查看用户请求js
http://s3.运维网.com/wyfs02/M02/49/F8/wKiom1QgxsTgZ3ODAANrAxyEto4507.jpg2、查看请求图片资源
http://s3.运维网.com/wyfs02/M00/49/F8/wKiom1QgxxHyNf8DAARHOmx-Jes787.jpg再查看
http://s3.运维网.com/wyfs02/M01/49/F8/wKiom1QgxziSJe6eAAMsnGMAyk4758.jpg再查看
http://s3.运维网.com/wyfs02/M01/49/F8/wKiom1Qgx1rg4HybAAMizyBR5PI352.jpg
说明:
通过上述修改后,已经能够实现动静分离了
页:
[1]