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

[经验分享] HAproxy指南之haproxy实现动静分离(案例篇)

[复制链接]

尚未签到

发表于 2019-1-1 08:10:10 | 显示全部楼层 |阅读模式
  

实际应用环境中,往往需要根据业务请求将相关不同请求跳转到指定的后端server,比如客户静态资源请求交给静态资源server处理,php请求交给php server处理,jsp请求交给tomcat处理,即业务上的应用请求分离,而haproxy完全可以利用acl匹配规则实现这一目的 。


一. haproxy实现应用动静分离
如图所示为整体的拓扑图:

  需求说明:
  当客户端访问haproxy时,请求的是静态文件内容时,请求转交给static server,请求的是php内容时,请求转交给php server,请求的是jsp内容时,请求转交给tomcat server,以实现动静分离


一.部署前说明:
(1)系统版本: centos 6.6(64位)
(2)角色及ip相关信息:
角色名称ip信息
haproxy servereth0:172.51.96.233/24  &&  eth1:192.168.0.233/24
static servereth1:192.168.0.247/24
php servereth1:192.168.0.235/24
tomcat servereth1:192.168.0.238/24
  

二. 部署操作

haproxy server上操作
编译安装haproxy

1.1 到haproxy官网下载haproxy源码包如下
cd ~
wget http://www.haproxy.org/download/1.5/src/haproxy-1.5.15.tar.gz

1.2 创建haproxy运行用户


groupadd -r haproxy
useradd -g haproxy -M -s /sbin/nologin haproxy
1.3 编译安装haproxy:

cd ~
tar zxvf haproxy-1.5.15.tar.gz -C /usr/local/src
cd /usr/local/src/haproxy-1.5.15
make TARGET=linux26  PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
注意:TARGET=Linux26 是通过uname -a 来查看Linux内核版本的
1.4 创建haproxy主配置文件:
mkdir /etc/haproxy/
touch /etc/haproxy/haproxy.cfg
后端web server上操作
1.5 分别在img server,php server,tomcat server安装相应的web环境并创建测试页,其中:
(1)static server的访问url为:http://192.168.0.247/img/haproxy.PNG  ,页面内容如下:



(2)php server的访问url为:http://192.168.0.235/info.php  ,页面内容如下:



(3)tomcat server的访问url为:http://192.168.238:8086/test.jsp  ,页面内容如下:

1.6 编辑haproxy server的haproxy主配置文件:
代码内容如下

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
        log 127.0.0.1   local3            
        maxconn 204800
        chroot /usr/local/haproxy
        user  haproxy
        group haproxy
        daemon
        nbproc 1
        pidfile /var/run/haproxy.pid
        stats socket /usr/local/haproxy/stats
        description haproxy server
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
        log     global
        mode    http
        maxconn 10000
        option  httplog
        option  httpclose
        option  dontlognull
        option  forwardfor      except 127.0.0.0/8
        retries 3
        option redispatch
        option abortonclose
        balance roundrobin
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
#---------------------------------------------------------------------
# use listen setting the haproxy status for site
#---------------------------------------------------------------------
listen admin_status     #设置haproxy监控状态
        bind *:3030
        mode http
        log 127.0.0.1 local3 err
        stats refresh 5s
        stats uri /status     #监控状态页面访问url
        stats realm www.skeryp.com
        stats auth admin:admin
        stats hide-version
        stats admin if TRUE
#---------------------------------------------------------------------
# main listen which proxys to the backends
#---------------------------------------------------------------------
listen  www
        bind *:80
        maxconn 5000
        mode http
        log global
        option httplog
        option httpclose
        option forwardfor
        log         global
        default_backend default   #设置默认访问页面
        #定义当请求的内容是静态内容时,将请求转交给static server的acl规则      
        acl url_static path_beg  -i /static /images /img /javascript /stylesheets
        acl url_static path_end  -i .jpg .gif .png .css .js .html
        acl host_static hdr_beg(host)  -i img. video. download. ftp. imags. videos.
        #定义当请求的内容是php内容时,将请求转交给php server的acl规则   
        acl url_php path_end     -i .php
        #定义当请求的内容是.jsp或.do内容时,将请求转交给tomcat server的acl规则   
        acl url_jsp path_end     -i .jsp .do
        #引用acl匹配规则
        use_backend static_pool if  url_static or host_static
        use_backend php_pool    if  url_php
        use_backend tomcat_pool if  url_jsp
        #定义后端backend server
backend static_pool
        option  httpchk GET /index.html
        server static1 192.168.0.247:80 cookie id1  check inter 2000 rise 2 fall 3
backend php_pool
        option  httpchk GET /info.php
        server php1 192.168.0.235:80 cookie id1 check inter 2000 rise 2 fall 3
backend tomcat_pool
        option  httpchk GET /index.jsp
        server tomcat1 192.168.0.238:8086 cookie id2 check inter 2000 rise 2 fall 3
#
backend default
        mode http
        option  httpchk GET /index.html
        server default 192.168.0.127:80 cookie id1 check inter 2000 rise 2 fall 3 maxconn 5000注意:
上面的www的配置部分也可以用frontend配置块来替换,如下所示:

frontend www
        bind *:80
        maxconn 5000
        mode http
        log global
        option httplog
        option httpclose
        option forwardfor
        log         global
        default_backend default      
        acl url_static path_beg  -i /static /images /img /javascript /stylesheets
        acl url_static path_end  -i .jpg .gif .png .css .js .html
        acl host_static hdr_beg(host)  -i img. video. download. ftp. imags. videos.
        acl url_php path_end     -i .php
        acl url_jsp path_end     -i .jsp .do
        use_backend static_pool if  url_static or host_static
        use_backend php_pool    if  url_php
        use_backend tomcat_pool if  url_jsp
backend static_pool
        option  httpchk GET /index.html
        server static1 192.168.0.247:80 cookie id1  check inter 2000 rise 2 fall 3
backend php_pool
        option  httpchk GET /info.php
        server php1 192.168.0.235:80 cookie id1 check inter 2000 rise 2 fall 3
backend tomcat_pool
        option  httpchk GET /index.jsp
        server tomcat1 192.168.0.238:8086 cookie id2 check inter 2000 rise 2 fall 3备注:  listen配置块是frontend和backend的组合体,listen里面可以单独配置backend不配置frontend,也可以组合使用,即listen配置区域可以交差使用frontend和backend的配置,如acl可以配置到frontend块, 也可以直接配置到listen块,但是不能配置到backend块。如backend的中server可以直接配置到listen配置区域,但不能直接配置到frontend配置区域
1.7 重启haproxy服务:

server haproxy restart
关于haproxy服务脚本代码请访问:http://blief.blog.运维网.com/6170059/1750573
  

  三. 结论测试
  在客户端访问:http://172.51.96.233/img/haproxy.PNG,可以发现haproxy将请求转交给后端static server了。如下:
  


  

  访问:http://172.51.96.233/info.php,可以发现haproxy将请求转交给后端php server了。如下:

  

  访问:http://172.51.96.233/test.jsp,可以发现haproxy将请求转交给后端tomcat server了。如下所示:

  从上可知:haproxy已经成功实现了动静分离,即静态内容交由静态server处理,动态内容交由动态处理的server处理
  

  如果我们要查看各个server的健康状态,可以登录:http://172.51.96.233:3030/admin,如下

  

  总结:haproxy可以利用acl规则匹配url做相应的请求跳转,比如动静分离,域名跳转等等应用需求,haproxy是一款性能很强大的四层以及七层代理server。
  

  

  





运维网声明 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-658102-1-1.html 上篇帖子: HAproxy指南之haproxy双机热备 (案例篇) 下篇帖子: Haproxy的介绍和安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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