Linux运维之HAProxy实现web页面的动静分离、读写分离

前言:

本章的内容环境承接上一篇博客:
Linux运维之HAProxy实现负载均衡(日志、监控、acl访问控制的配置)

一、实验环境

实验环境: rhel6.5 selinux and iptables disabled

实验主机:

172.25.75.1 (server1)            haproxy

172.25.75.2 (server2)            web1

172.25.75.3(server3)             web2

172.25.75.250					 客户端

二、动静分离

1、动静分离的实用性

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

2、更改haproxy服务端的配置文件,并重启服务

vim /etc/haproxy/haproxy.cfg

global
        maxconn         65535
        stats socket    /var/run/haproxy.stat mode 600 level admin
        log             127.0.0.1 local0
        uid             200
        gid             200
        chroot          /var/empty
        daemon

defaults
        mode            http
        log             global
        option          httplog
        option          dontlognull
        monitor-uri     /monitoruri
        maxconn         8000
        timeout client  30s
        retries         2
        option redispatch
        timeout connect 5s
        timeout server  5s
        stats uri       /admin/stats

# The public 'www' address in the DMZ
frontend public
        bind            172.25.75.1:80 name clear
        #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
        #use_backend     static if { hdr_beg(host) -i img }
        #use_backend     static if { path_beg /img /css   }



        use_backend     dynamic if { path_end .php }
        default_backend static

# The static backend backend for 'Host: img', /img and /css.
backend static
        balance         roundrobin
        server          web1 172.25.75.2:80 check inter 1000

backend dynamic
        balance         roundrobin
        server          web2 172.25.75.3:80 check inter 1000

在这里插入图片描述

重启服务:

/etc/init.d/haproxy restart

在这里插入图片描述

3、在server3上删除默认发布页,编辑index.php发布页,下载php插件

cd /var/www/html/
rm -rf index.html
vim index.php
<?php
        phpinfo();
?>

yum install php -y

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、server3上重启httpd服务

/etc/init.d/httpd restart

在这里插入图片描述

5、测试

静态:
在客户端浏览器输入:
172.25.75.1/index.html
在这里插入图片描述
动态:
在客户端浏览器输入:
172.25.75.1/index.php
在这里插入图片描述

三、读写分离

1、server1修改haproxy配置文件,并重启服务

vim /etc/haproxy/haproxy.cfg

更改:
 34 frontend public
 35         bind            172.25.75.1:80 name clear
 36         #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem
 37         #use_backend     static if { hdr_beg(host) -i img }
 38         #use_backend     static if { path_beg /img /css   }
 39 
 40         acl write method POST
 41         acl write method PUT
 42         
 43         acl read method GET
 44         acl read method HEAD
 45         
 46         use_backend     static if write
 47         default_backend dynamic
 48         
 49 # The static backend backend for 'Host: img', /img and /css.
 50 backend static
 51         balance         roundrobin
 52         server          web1 172.25.75.2:80 check inter 1000
 53         
 54 backend dynamic
 55         balance         roundrobin
 56         server          web2 172.25.75.3:80 check inter 1000

在这里插入图片描述

/etc/init.d/haproxy restart

在这里插入图片描述
此配置文件的目的为:默认进入web2的发布页面,也就是web2为读的服务器,write时为static服务,也就是web1写服务器,实现网页的读写分离。

2、在server3上发布网页内容,此文件为php语言编写,并重启服务

vim index.php

<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>

在这里插入图片描述
在这里插入图片描述

/etc/init.d/httpd restart

在这里插入图片描述

3、在server2上编写write时的web1发布内容,创建上传目录upload,重启服务

vim upload_file.php

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 2000000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

在这里插入图片描述
创建upload目录,并重启服务:

mkdir upload
chmod 777 upload
/etc/init.d/httpd restart

在这里插入图片描述

4、测试

在客户端浏览器输入:172.25.75.1
在这里插入图片描述
分析:网页所展示的内容为web2(server3)的httpd服务发布的内容。

在这里插入图片描述
点击Browse,选择一张图片上传。
在这里插入图片描述
点击:Submit
在这里插入图片描述
分析:上传图片后显示的页面为web1(server2)httpd发布的内容。

查看server2的upload目录:
在这里插入图片描述
图片在web1(server2)的服务器中!实现了web页面的读写分离!!!

猜你喜欢

转载自blog.csdn.net/qq_41830712/article/details/89478916
今日推荐