本节我们来讲一讲haproxy的相关知识。

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

好的下面我们就来实现一下这个过程。

实验拓扑图:

haproxy实现动静分离_第1张图片

代理服务器为内部的2台WEB服务进行代理,其中一台是动态内容的服务器,另一台是静态内容的服务器,haproxy会自动识别出请求的内容为动态还是静态,从而将请求分发到各自的服务器进行响应。

动态服务器

该服务器中安装了PHP服务,这里我是直接yum安装的。因此可以响应PHP请求,在主页中放的是一个PHP网页,注意,相应的在httpd服务器的配置文件中需要修改的一些选项还是得修改的。

haproxy实现动静分离_第2张图片

p_w_picpath

静态服务器

该服务器中没有安装PHP,只在跟目录中放了一个普通的主页面

p_w_picpath

 

代理服务器

直接yum安装haproxy

修改配置文件

[root@www ~]# vim /etc/haproxy/haproxy.cfg

 

 

#---------------------------------------------------------------------   
# Example configuration for a possible web application.  See the    
# full configuration options online.    
#    
#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt    
#    
#---------------------------------------------------------------------
#---------------------------------------------------------------------   
# Global settings    
#---------------------------------------------------------------------    
global    
    # to have these messages end up in /var/log/haproxy.log you will    
    # need to:    
    #    
    # 1) configure syslog to accept network log events.  This is done    
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in    
    #    /etc/sysconfig/syslog    
    #    
    # 2) configure local2 events to go to the /var/log/haproxy.log    
    #   file. A line like the following can be added to    
    #   /etc/sysconfig/syslog    
    #    
    #    local2.*                       /var/log/haproxy.log    
    #    
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy                                                                  #全局配置端不需要改动   
    pidfile     /var/run/haproxy.pid    
    maxconn     4000    
    user        haproxy    
    group       haproxy    
    daemon
    # turn on stats unix socket   
    stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------   
# common defaults that all the 'listen' and 'backend' sections will    
# use if not designated in their block    
#---------------------------------------------------------------------    
defaults    
    mode                    http    
    log                     global    
    option                  httplog    
    option                  dontlognull    
    option http-server-close    
    option forwardfor       except 127.0.0.0/8    
    option                  redispatch    
    retries                 3    
    timeout http-request    10s    
    timeout queue           1m    
    timeout connect         10s    
    timeout client          1m    
    timeout server          1m    
    timeout http-keep-alive 10s    
    timeout check           10s    
    maxconn                 3000
#---------------------------------------------------------------------   
# main frontend which proxys to the backends    
#---------------------------------------------------------------------    
frontend  main     
    bind :80                                        #绑定端口    
    acl url_static       path_beg       -i /static /p_w_picpaths /javascript /stylesheets     #定义静态内容前缀    
    acl url_static       path_end       -i .jpg .gif .png .css .js  .html                             #定义静态内容后缀
    use_backend static          if url_static   
    default_backend             app
#---------------------------------------------------------------------   
# static backend for serving up p_w_picpaths, stylesheets and such    
#---------------------------------------------------------------------    
backend static    
    balance     roundrobin                                                                          
    server      static 172.16.6.1:80  check                                                  #定义后端静态内容服务器
#---------------------------------------------------------------------   
# round robin balancing between the various backends    
#---------------------------------------------------------------------    
backend app    
    balance     roundrobin    
    server  app1 172.16.6.2:80  check                                                      #定义后端动态内容服务器

配置完成启动服务

p_w_picpath

下面就可以开始测试了

静态网页:

haproxy实现动静分离_第3张图片

动态网页:

haproxy实现动静分离_第4张图片

OK,这样我们的一个最简单的动静分离就实现了,谢谢!