天天看点

Haproxy的负载均衡、动静分离、状态监控、近期网络架构

一、Haproxy的简介

    Haproxy的官网站点:http://haproxy.com/

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

     HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

二、Haproxy的工作模式

大致的意思就是:可以分为两部分,

第一部分是互联网,包括互联网上众多的路由设备、Firewall等;

第二部分是本地的网络架构,包括Firewall,proxy、Web server,Database等

Haproxy的注释Local balanceer in proxy mode -- 工作在代理模下是一个负载均衡的功能

通过Haproxy代理后端的Web server群集,如果需要与数据库交互,有Web server与Database建立连接。

三、Haproxy的安装和配置说明

CentOS 6.5系统中yum源提供的Haproxy的版本为1.5.18,在这里我们直接用yum安装

1、安装haproxy

<code>yum </code><code>install</code> <code>haproxy -y</code>

<code>rpm -ql haproxy                    </code><code>#可以查看yum安装Haproxy生成了哪些文件</code>

<code>/etc/haproxy</code>

<code>/etc/haproxy/haproxy</code><code>.cfg            </code><code>#haproxy的配置文件</code>

<code>/etc/logrotate</code><code>.d</code><code>/haproxy</code>

<code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/haproxy</code>            <code>#haproxy的服务脚本文件</code>

<code>/etc/sysconfig/haproxy</code>

<code>/usr/bin/halog</code>

<code>/usr/bin/iprange</code>

<code>/usr/sbin/haproxy</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/CHANGELOG</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/LICENSE</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/README</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/acl-content-sw</code><code>.cfg</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/acl</code><code>.fig</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/architecture</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/close-options</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/coding-style</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/configuration</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/content-sw-sample</code><code>.cfg</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/cookie-options</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/cttproxy-src</code><code>.cfg</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/design-thoughts</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/design-thoughts/backends-v0</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/design-thoughts/backends</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/design-thoughts/be-fe-changes</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/design-thoughts/binding-possibilities</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/design-thoughts/buffer-redesign</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/design-thoughts/buffers</code><code>.fig</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/design-thoughts/config-language</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/design-thoughts/connection-reuse</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/design-thoughts/cttproxy-changes</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/design-thoughts/entities-v2</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/design-thoughts/how-it-works</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/design-thoughts/http_load_time</code><code>.url</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/design-thoughts/rate-shaping</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/design-thoughts/sess_par_sec</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/gpl</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/haproxy-en</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/haproxy-fr</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/haproxy</code><code>.1</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/haproxy</code><code>.cfg</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/acl</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/body-parsing</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/buffer-operations</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/buffer-ops</code><code>.fig</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/connect-status</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/connection-header</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/connection-scale</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/entities</code><code>.fig</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/entities</code><code>.pdf</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/entities</code><code>.svg</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/entities</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/hashing</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/header-parser-speed</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/header-tree</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/http-cookies</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/http-docs</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/http-parsing</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/naming</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/pattern</code><code>.dia</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/pattern</code><code>.pdf</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/polling-states</code><code>.fig</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/repartition-be-fe-fi</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/sequence</code><code>.fig</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/stats-v2</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/stream-sock-states</code><code>.fig</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/internals/todo</code><code>.cttproxy</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/lgpl</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/proxy-protocol</code><code>.txt</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/queuing</code><code>.fig</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/tarpit</code><code>.cfg</code>

<code>/usr/share/doc/haproxy-1</code><code>.5.18</code><code>/url-switching</code><code>.cfg</code>

<code>/usr/share/haproxy</code>

<code>/usr/share/haproxy/400</code><code>.http         </code><code>#400错误的状态码页面</code>

<code>/usr/share/haproxy/403</code><code>.http         </code><code>#403错误的状态码页面</code>

<code>/usr/share/haproxy/408</code><code>.http         </code><code>#408错误的状态码页面</code>

<code>/usr/share/haproxy/500</code><code>.http         </code><code>#500错误的状态码页面</code>

<code>/usr/share/haproxy/502</code><code>.http         </code><code>#502错误的状态码页面</code>

<code>/usr/share/haproxy/503</code><code>.http         </code><code>#503错误的状态码页面</code>

<code>/usr/share/haproxy/504</code><code>.http         </code><code>#504错误的状态码页面</code>

<code>/usr/share/haproxy/README</code>

<code>/usr/share/man/man1/halog</code><code>.1.gz      </code><code>#可以直接使用man halog查看命令的使用语法</code>

<code>/usr/share/man/man1/haproxy</code><code>.1.gz    </code><code>#可以直接使用man haproxy查看命令的使用语法</code>

<code>/var/lib/haproxy</code>

2、haproxy的配置文件说明

<code># cd /etc/haproxy/</code>

<code># cp haproxy.cfg haproxy.cfg.bak</code>

<code># vim haproxy.cfg</code>

<code>**********************************************************************</code>

<code>#---------------------------------------------------------------------</code>

<code># Example configuration for a possible web application.  See the</code>

<code># full configuration options online.</code>

<code>#</code>

<code>#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt</code>

<code> </code> 

<code># Global settings    </code>

<code>global    </code><code>#全局配置文件</code>

<code>    </code><code># to have these messages end up in /var/log/haproxy.log you will</code>

<code>    </code><code># need to:     #配置日志</code>

<code>    </code><code>#</code>

<code>    </code><code># 1) configure syslog to accept network log events.  This is done</code>

<code>    </code><code>#    by adding the '-r' option to the SYSLOGD_OPTIONS in</code>

<code>    </code><code>#    /etc/sysconfig/syslog    #修改syslog配置文件</code>

<code>    </code><code># 2) configure local2 events to go to the /var/log/haproxy.log</code>

<code>    </code><code>#   file. A line like the following can be added to</code>

<code>    </code><code>#   /etc/sysconfig/syslog    #定义日志设备</code>

<code>    </code><code>#    local2.*                       /var/log/haproxy.log</code>

<code>    </code><code>log         127.0.0.1 local2        </code><code>#日志配置,所有的日志都记录本地,通过local2输出</code>

<code>    </code><code>chroot      </code><code>/var/lib/haproxy</code>        <code>#改变haproxy的工作目录</code>

<code>    </code><code>pidfile     </code><code>/var/run/haproxy</code><code>.pid    </code><code>#指定pid文件的路径</code>

<code>    </code><code>maxconn     4000                    </code><code>#最大连接数的设定</code>

<code>    </code><code>user        haproxy                 </code><code>#指定运行服务的用户</code>

<code>    </code><code>group       haproxy                 </code><code>#指定运行服务的用户组</code>

<code>    </code><code>daemon</code>

<code>    </code><code># turn on stats unix socket</code>

<code>    </code><code>stats socket </code><code>/var/lib/haproxy/stats</code>

<code># common defaults that all the 'listen' and 'backend' sections will</code>

<code># use if not designated in their block</code>

<code>defaults</code>

<code>     </code> 

<code>    </code><code>mode                    http                  </code><code>#默认使用协议,可以为{http|tcp|health} http:是七层协议 tcp:是四层 health:只返回OK</code>

<code>    </code><code>log                     global                </code><code>#全局日志记录</code>

<code>    </code><code>option                  httplog               </code><code>#详细记录http日志</code>

<code>    </code><code>option                  dontlognull           </code><code>#不记录空日志</code>

<code>    </code><code>option http-server-close                      </code><code>#启用http-server-close</code>

<code>    </code><code>option forwardfor       except 127.0.0.0</code><code>/8</code>    <code>#来自这些信息的都不forwardfor</code>

<code>    </code><code>option                  redispatch            </code><code>#重新分发,ServerID对应的服务器宕机后,强制定向到其他运行正常的服务器</code>

<code>    </code><code>retries                 3                      </code><code>#3次连接失败则认为服务不可用</code>

<code>    </code><code>timeout http-request    10s                    </code><code>#默认http请求超时时间</code>

<code>    </code><code>timeout queue           1m                     </code><code>#默认队列超时时间</code>

<code>    </code><code>timeout connect         10s                    </code><code>#默认连接超时时间</code>

<code>    </code><code>timeout client          1m                     </code><code>#默认客户端超时时间</code>

<code>    </code><code>timeout server          1m                     </code><code>#默认服务器超时时间</code>

<code>    </code><code>timeout http-keep-alive 10s                    </code><code>#默认持久连接超时时间</code>

<code>    </code><code>timeout check           10s                    </code><code>#默认检查时间间隔</code>

<code>    </code><code>maxconn                 3000                   </code><code>#最大连接数</code>

<code># main frontend which proxys to the backends</code>

<code>frontend  main *:5000</code>

<code>    </code><code>#定义ACL规则以如".html"结尾的文件;-i:忽略大小写</code>

<code>    </code><code>acl url_static       path_beg       -i </code><code>/static</code> <code>/images</code> <code>/javascript</code> <code>/stylesheets</code>

<code>    </code><code>acl url_static       path_end       -i .jpg .gif .png .css .js</code>

<code>    </code><code>use_backend static          </code><code>if</code> <code>url_static    </code><code>#调用后端服务器并检查ACL规则是否被匹配</code>

<code>    </code><code>default_backend             app              </code><code>#客户端访问时默认调用后端服务器地址池</code>

<code># static backend for serving up images, stylesheets and such</code>

<code>backend static                    </code><code>#定义后端服务器</code>

<code>    </code><code>balance     roundrobin        </code><code>#定义算法;基于权重进行轮询</code>

<code>    </code><code>server      static 127.0.0.1:4331 check    check:启动对后端server的健康状态检测</code>

<code># round robin balancing between the various backends</code>

<code>backend app</code>

<code>    </code><code>balance     roundrobin</code>

<code>    </code><code>server  app1 127.0.0.1:5001 check</code>

<code>    </code><code>server  app2 127.0.0.1:5002 check</code>

<code>    </code><code>server  app3 127.0.0.1:5003 check</code>

<code>    </code><code>server  app4 127.0.0.1:5004 check</code>

3、haproxy的命令详解

<code># haproxy -h</code>

<code>HA-Proxy version 1.5.18 2016</code><code>/05/10</code>

<code>Copyright 2000-2016 Willy Tarreau &lt;[email protected]&gt;</code>

<code>Usage : haproxy [-f &lt;cfgfile&gt;]* [ -vdVD ] [ -n &lt;maxconn&gt; ] [ -N &lt;maxpconn&gt; ]</code>

<code>        </code><code>[ -p &lt;pidfile&gt; ] [ -m &lt;max megs&gt; ] [ -C &lt;</code><code>dir</code><code>&gt; ]</code>

<code>        </code><code>-</code><code>v</code> <code>displays version ; -vv shows known build options.</code>

<code>        </code><code>-d enters debug mode ; -db only disables background mode.</code>

<code>        </code><code>-dM[&lt;byte&gt;] poisons memory with &lt;byte&gt; (defaults to 0x50)</code>

<code>        </code><code>-V enters verbose mode (disables quiet mode)</code>

<code>        </code><code>-D goes daemon ; -C changes to &lt;</code><code>dir</code><code>&gt; before loading files.</code>

<code>        </code><code>-q quiet mode : don't display messages</code>

<code>        </code><code>-c check mode : only check config files and </code><code>exit</code>

<code>        </code><code>-n sets the maximum total </code><code># of connections (2000)</code>

<code>        </code><code>-m limits the usable amount of memory (</code><code>in</code> <code>MB)</code>

<code>        </code><code>-N sets the default, per-proxy maximum </code><code># of connections (2000)</code>

<code>        </code><code>-L </code><code>set</code> <code>local</code> <code>peer name (default to </code><code>hostname</code><code>)</code>

<code>        </code><code>-p writes pids of all children to this </code><code>file</code>

<code>        </code><code>-de disables epoll() usage even when available</code>

<code>        </code><code>-dp disables poll() usage even when available</code>

<code>        </code><code>-dS disables splice usage (broken on old kernels)</code>

<code>        </code><code>-dV disables SSL verify on servers side</code>

<code>        </code><code>-sf</code><code>/-st</code> <code>[pid ]* finishes</code><code>/terminates</code> <code>old pids. Must be last arguments.</code>

4、配置Haproxy的日志

<code>默认情况下,Haproxy没有启用日志文件,但是我们可以根据haproxy的配置文件做修改。</code>

<code>(1)修改系统日志的配置文件</code>

<code># vim /etc/sysconfig/rsyslog</code>

<code>SYSLOGD_OPTIONS=</code><code>"-c 2 -r"</code>

<code>(2)增加日志设备</code>

<code># vim /etc/rsyslog.conf </code>

<code>local2.*                                                </code><code>/var/log/haproxy</code><code>.log</code>

<code>(3)重启一下日志服务</code>

<code># /etc/init.d/rsyslog restart</code>

<code>关闭系统日志记录器:                                       [确定]</code>

<code>启动系统日志记录器:                                       [确定]</code>

<code>(4)查看日志记录信息</code>

<code># tail -f /var/log/haproxy.log</code>

四、Haproxy负载均衡web

1、一个配置示例:

Haproxy-Server:10.10.172.195

Apache1-Client:10.10.172.196

Apache2-Client:10.10.172.197

<code># Global settings</code>

<code>global</code>

<code>    </code><code># need to:</code>

<code>    </code><code>#    /etc/sysconfig/syslog</code>

<code>    </code><code>#   /etc/sysconfig/syslog</code>

<code>    </code><code>log         127.0.0.1 local2</code>

<code>    </code><code>chroot      </code><code>/var/lib/haproxy</code>

<code>    </code><code>pidfile     </code><code>/var/run/haproxy</code><code>.pid</code>

<code>    </code><code>maxconn     4000</code>

<code>    </code><code>user        haproxy</code>

<code>    </code><code>group       haproxy</code>

<code>    </code><code>mode                    http</code>

<code>    </code><code>log                     global</code>

<code>    </code><code>option                  httplog</code>

<code>    </code><code>option                  dontlognull</code>

<code>    </code><code>option http-server-close</code>

<code>    </code><code>option forwardfor       except 127.0.0.0</code><code>/8</code>

<code>    </code><code>option                  redispatch</code>

<code>    </code><code>retries                 3</code>

<code>    </code><code>timeout http-request    10s</code>

<code>    </code><code>timeout queue           1m</code>

<code>    </code><code>timeout connect         10s</code>

<code>    </code><code>timeout client          1m</code>

<code>    </code><code>timeout server          1m</code>

<code>    </code><code>timeout http-keep-alive 10s</code>

<code>    </code><code>timeout check           10s</code>

<code>    </code><code>maxconn                 30000</code>

<code>listen stats</code>

<code>    </code><code>mode http</code>

<code>    </code><code>bind 0.0.0.0:8080</code>

<code>    </code><code>stats </code><code>enable</code>

<code>    </code><code>stats hide-version</code>

<code>    </code><code>stats uri     </code><code>/haproxyadmin</code><code>?stats</code>

<code>    </code><code>stats realm   Haproxy\ Statistics</code>

<code>    </code><code>stats auth    admin:123456</code>

<code>    </code><code>stats admin </code><code>if</code> <code>TRUE</code>

<code>frontend http-</code><code>in</code>

<code>    </code><code>bind *:80</code>

<code>    </code><code>log global</code>

<code>    </code><code>option httpclose</code>

<code>    </code><code>option logasap</code>

<code>    </code><code>option dontlognull</code>

<code>    </code><code>capture request  header Host len 20</code>

<code>    </code><code>capture request  header Referer len 60</code>

<code>    </code><code>default_backend servers</code>

<code>frontend healthcheck</code>

<code>    </code><code>bind :1099</code>

<code>    </code><code>option forwardfor</code>

<code>backend servers</code>

<code>    </code><code>balance roundrobin</code>

<code>    </code><code>server websrv1 10.10.172.196:80 check maxconn 2000</code>

<code>    </code><code>server websrv2 10.10.172.197:80 check maxconn 2000</code>

2、启动Haproxy服务

<code># service haproxy start</code>

<code>Starting haproxy: [  OK  ]</code>

<code># chkconfig haproxy on</code>

3、浏览器访问

单独访问Apache1:10.10.172.196

单独访问Apache2:10.10.172.197

多次刷新访问Haproxy:10.10.172.195

多次刷新Haproxy的website,会切换到后端不同的webserver主机上。

五、Haproxy的状态监控

1、Haproxy的监控页面

<code>listen stats                            </code><code>#关联前端和后端定义一个完整的代理</code>

<code>    </code><code>mode http                           </code><code>#设置代理协议</code>

<code>    </code><code>bind 0.0.0.0:8080                   </code><code>#绑定相应的端口</code>

<code>    </code><code>stats </code><code>enable</code>                        <code>#开启Haproxy统计状态</code>

<code>    </code><code>stats refresh 3s             </code><code>#统计页面自动刷新时间间隔</code>

<code>    </code><code>stats hide-version                  </code><code>#隐藏代理服务器版本</code>

<code>    </code><code>stats uri     </code><code>/haproxyadmin</code><code>?stats   </code><code>#访问的url</code>

<code>    </code><code>stats realm   Haproxy\ Statistics   </code><code>#统计页面认证时提示内容信息</code>

<code>    </code><code>stats auth    admin:123456          </code><code>#设置登录用户和密码     </code>

<code>    </code><code>stats admin </code><code>if</code> <code>TRUE                 </code><code>#如果认证通过,则就可以打开stats</code>

2、访问监控页面

(1)登陆监控页面

admin/123456

(2)查看监控页面

(3)模拟一下故障

<code># service httpd stop</code>

<code>Stopping httpd: [  OK  ]</code>

(4)在次查看监控页面

六、Haproxy的动静分离

haproxy动静分离的配置

<code>    </code><code>bind 0.0.0.0:1080</code>

<code>    </code><code>acl url_static  path_end -i .html .jpg .gif</code>

<code>    </code><code>acl url_dynamic path_end -i .php</code>

<code>    </code><code>use_backend lnmmp </code><code>if</code> <code>url_dynamic</code>

<code>    </code><code>server websrv1 10.10.172.196:80 check rise 2 fall 1 weight 2 maxconn 2000</code>

<code>    </code><code>server websrv2 10.10.172.197:80 check rise 2 fall 1 weight 2 maxconn 2000</code>

<code>backend lnmmp</code>

<code>    </code><code>balance </code><code>source</code>

<code>    </code><code>server websrv3 10.10.172.198:80 check rise 2 fall 1 maxconn 2000</code>

动静分离实现的需求:

  访问index.html页面,由Apache1,、Apache2轮询显示;访问index.php页面,有LNMP或者LAMP服务器显示,

本文转自 dengaosky 51CTO博客,原文链接:http://blog.51cto.com/dengaosky/2050231,如需转载请自行联系原作者