Haproxy:apache的反向代理+负载均衡(日志配置,访问控制,动静分离,读写分离)

一.Haproxy简介

1.定义

(1)Haproxy是一个使用C语言编写的自由以及开放的源代软件,其提供高性能,负载均衡,以及基于TCP和HTTP应用程序代理。相较于Nginx,HAProxy更专注于反向代理,因此它可以支持更多的选项,更精细的控制,更多的健康检测机制的负载均衡算法。
(2)HAProxy特别适用于那些负载特别大的web站点,这些站点通常又需要会话保持或者七层处理,HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。
(2)HAProxy的运行模式使得它可以很简单安全的整合进当前的架构中,同时可以保护后台的web服务器不被暴露到网络上。

二.模拟HAProxy:apache的反向代理+负载均衡的实现

1.实验环境的搭建

创建rhel6.5版本的虚拟机base作为母盘,建立快照vm1,vm2,vm3(详情请参考博文:母盘的创建6.5)

rhel6.5 selinux and iptables disabled

主机名IP服务
hetoto1172.25.12.1haproxy
hetoto2172.25.12.2apache
hetoto3172.25.12.3apache
物理机172.25.12.250测试

2.配置过程

  • Makefile:原码编译时把一些所有的项目写好后,configue会生成该文件,有Makefile就有make && make
    install
  • rpm:安装包安装在安装好以后会把配置文件的路径打乱
  • 原码编译:可以直接指定下载婉称后位呢加的放置路径
  • gdb:C语言的调制工具

(1)官网下载安装包(本次实验已有安装包直接将安装包scp的hetoto1上即可)
http://download.openpkg.org/components/cache/haproxy/
在这里插入图片描述
(2)安装包的解压
在这里插入图片描述

在这里插入图片描述注意:find -name *.spec查看时如果图上所显示的文件存在表示可以用原码软件包安装,本次实验是将其重新做成rpm包再进行安装配置文件会生成再/etc/haproxy目录但是目录里面没有配置源文件,需要自己添加

(3)安装源码编译软件,源码编译HAproxy软件

a.安装该软件安装过程中的需要的安装包,解决其安装过程中的依赖性,否则会显示编译失败(安装打包工具及其编译工具)

[root@hetoto1 haproxy-1.7.3]# yum install -y rpm-build pcre-devel gcc

在这里插入图片描述

b.生成rpm包

[root@hetoto1 ~]# rpmbuild -tb haproxy-1.7.3.tar.gz

在这里插入图片描述

c.会生成rpmbuild目录(安装包所在的目录)该目录下的子目录中有生成的安装包

[root@hetoto1 ~]#  cd /root/rpmbuild/RPMS/x86_64/
[root@hetoto1 x86_64]# ls
[root@hetoto1 x86_64]# rpm -ivh haproxy-1.7.3-1.x86_64.rpm 

在这里插入图片描述
(4)建立haproxy用户和组,利用linux对haproxy用户的访问控制实现对haproxy的服务的控制

[root@hetoto1 x86_64]# groupadd -g 200 haproxy
[root@hetoto1 x86_64]# useradd -u 200 -g 200 -M haproxy
[root@hetoto1 x86_64]# id haproxy

在这里插入图片描述
(5)找到haproxy的配置文件,并复制到/etc/haproxy的目录下
在这里插入图片描述
(6)编辑配置文件
配置文件的编辑内容及详解如下:

10 global  ##全局定义
 11         maxconn         10000  #最大连接数
 12         stats socket    /var/run/haproxy.stat mode 600 level admin
 13         log             127.0.0.1 local0 #本机日志
 14         uid             200 #haproxy用户的uid
 15         gid             200  #haproxy的gid
 16         chroot          /var/empty
 17         daemon
 18 
 19 defaults   #默认条件
 20         mode            http #默认使用http的7层模式 tcp:4层
 21 
 22 
 23         log             global
 24         option          httplog
 25         option          dontlognull
 26         monitor-uri     /monitoruri
 27         maxconn         8000
 28         timeout client  30s
 29 
 30         stats uri       /admin/stats
 31         option prefer-last-server
 32         retries   2
 33         option redispatch
 34         timeout connect 5s
 35         timeout server 5s
 36 
 37 frontend public
 38         bind   *:80 name clear  #监听所有服务端口
 39 #       bind 192.168.1.10:443 ssl crt/etc/haproxy/haproxy.pem
 40 #       use_backend  static if { hdr_beg(host) -i img }
 41 #       use_backend  static if { path_beg/img/css }
 42 
 43        default_backend static  #默认实用static后端服务器集群
 44 
 45 #The static backend backend for 'Host:img',/img and /css.
 46 
 47 backend static
 48        balance   roundrobin  #负载均衡算法
 49        server    statsrv1  172.25.12.2:80 check inter 1000    #后端服务器hetoto2
 50        server    statsrv2  172.25.12.3:80 check inter 1000    #后端服务器hetoto3   

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

在这里插入图片描述
(7)打开haproxy服务

[root@hetoto1 haproxy]# /etc/init.d/haproxy start

在这里插入图片描述
3.测试如下:
在hetoto2和hetoto3上安装httpd,并开启httpd服务,编写默认发布内容

[root@hetoto2 ~]# yum install -y httpd
[root@hetoto2 ~]# cd /var/www/html
[root@hetoto2 html]# vim index.tml
[root@hetoto2 html]# cat index.tml 
server2
[root@hetoto2 html]# /etc/init.d/httpd start 

在这里插入图片描述

在这里插入图片描述

[root@hetoto3 ~]# yum install -y httpd
[root@hetoto3 ~]# cd /var/www/html
[root@hetoto3 html]# ls
[root@hetoto3 html]# vim index.html
[root@hetoto3 html]# cat index.html 
server3
[root@hetoto3 html]# /etc/init.d/httpd start

在这里插入图片描述

在这里插入图片描述

  • 在物理机端测试haproxy服务主机(hetoto1)发现在hetoto2和hetoto3上轮询

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三.HAProxy的其它配置

1.定义用户密码及其刷新次数

  • 编辑haproxy的配置文件,添加如下内容

在这里插入图片描述

  • 重启服务

在这里插入图片描述

  • 测试:再stats网页可以看到每隔5s就会刷新一次,刷新页面会显示输入密码

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

基于TCP和HTTP的应用程序代理

创建日志指定存放路径

  • 编辑日志服务的配置文件
    在这里插入图片描述
    文件编辑内容如下:
 45         acl blacklist src 172.25.12.250
 46         http-request deny if blacklist
 47         errorloc 403 http://172.25.12.1:8080/index.html 

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

  • 重启日志服务
[root@hetoto1 haproxy]# /etc/init.d/haproxy restart

在这里插入图片描述

  • 测试:
    再haproxy日志中查看到haproxy更新内容显示为设置的每5s更新一次

在这里插入图片描述

添加访问控制

  • 编辑配置文件
vim haproxy.cfg
  • 文件添加内容如下:

在这里插入图片描述

  • 重新启动haproxy服务
/tec/init.d/haproxy restart

在hetoto1上配置失败回切
a.下载httpd服务

[root@hetoto1 haproxy]# yum install -y httpd

在这里插入图片描述
b.修改httpd的默认发不端口因为80已经被haproxy占用

[root@hetoto1 haproxy]# vim /etc/httpd/conf/httpd.conf 
Listen 8080

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

  • 编写默认发布的内容

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

  • 重启服务
    [root@hetoto1 html]# /etc/init.d/httpd start
    [root@hetoto1 html]# /etc/init.d/httpd restart

在这里插入图片描述

  • 测试:
    在物理机

在这里插入图片描述

动态页面和静态页面的分离

  • 在hetoto3上安装php,编辑动态页面,完成后重启服务
[root@hetoto3 html]# yum install -y php

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

  • 在hetoto1上编辑haproxy的配置文件
    在这里插入图片描述
  • 重启服务

在这里插入图片描述

  • 测试:
    浏览器页面:

在这里插入图片描述
默认访问hetoto2页面

在这里插入图片描述
设置访问hetoto3的动态页面

读写分离

  • hetoto1上编辑配置文件,如果有写入操作,访问的是动态hetoto3主机

  • 文件编辑内容如下:
    在这里插入图片描述
    在这里插入图片描述

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

  • 在hetoto3的默认发布目录下,有index.php(选择图片的静态页面)和uoload_file.php(上传图片的动态页面)存放图片的目录是uoload目录

  • 给文件和目录添加相应的权限以便进行操作
    在这里插入图片描述

  • 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>

在这里插入图片描述

  • upload_file.php文件内容:(上传图片的动态页面)
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  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";
  }
?>                         

在这里插入图片描述

  • 修改上传文件的大小限制

在这里插入图片描述

  • 将编辑好的文件scp到hetoto2上

在这里插入图片描述

  • 在hetoto2上安装php,并重启httpd

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

  • hetoto3上开启httpd服务

在这里插入图片描述

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

  • 上传成功显示如下:
    在这里插入图片描述
  • 在hetoto2上查看可以看到上传的图片传到了hetoto2上

在这里插入图片描述

  • 在hetoto3上查看发现没有
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值