Haproxy实现反向代理+负载均衡(访问控制,动静分离,读写分离)

一.Haproxy简介

HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动,单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。 包括 GitHub、Bitbucket[3]、StackOverflow、Reddit、Tumblr、Twitter和 Tuenti在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。

二.HAProxy实验

实验环境:rhel7.5

主机名作用
server1(172.25.16.1)Haproxy
server2(172.25.16.2)后端httpd
server3(172.25.16.3)后端httpd

1.haproxy实现反向代理

1.server1安装haproxy

yum install -y haproxy.x86_64
rpm -qa | grep haproxy
haproxy-1.5.18-7.el7.x86_64
rpm -ql haproxy-1.5.18-7.el7.x86_64			##查看相关文件

在这里插入图片描述
在这里插入图片描述
2.修改haproxy的配置文件

vim /etc/haproxy/haproxy.cfg

在这里插入图片描述
3.在server2和server3上安装httpd,并编写测试文件

yum install httpd -y
vim /var/www/html/index.html
systemctl start httpd
curl localhost

在这里插入图片描述在这里插入图片描述
4.开启server1的haproxy的服务
在这里插入图片描述
5.在物理机上测试:

访问server1实现轮询访问
在这里插入图片描述

6.为haproxy添加访问日志

vim /etc/rsyslog.conf
systemctl restart rsyslog.service

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
7.再次在物理机上测试:访问server1

发现生成日志
在这里插入图片描述
8.配置文件中添加下面参数,可以实现web监控,和返回状态码。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
返回状态码:
在这里插入图片描述

9.haproxy设置黑名单,实现访问控制。

yum install httpd -y
vim /var/www/html/index.html
systemctl restart haproxy
vim /etc/http/conf/http.conf

systemctl start httpd
systemctl restart httpd


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试:
在这里插入图片描述

2.haproxy实现动静分离

  1. 在server3上安装php,编辑动态页面,完成后重启服务
    在这里插入图片描述

2.编辑haproxy的配置文件

在这里插入图片描述
在这里插入图片描述
测试:
静态访问
在这里插入图片描述
动态访问
在这里插入图片描述

3.读写分离

sever1的配置:
vim /etc/haproxy/haproxy.cfg			##修改配置文件
systemctl restart haproxy.service		##重启服务

在这里插入图片描述

server2和server3的配置:
yum install php -y				##安装php图形化服务
systemctl restart httpd			##重启服务
mkdir /var/www/html/upload		##建立一个目录用来写入文件
chmod 777 /var/www/html/upload	##给这个存储目录可写的权限

再编写两个文件,一个用配置读页面,一个用来设置存储路径
vim index.html					##配置页面的读取设置
##加上各自的主机名来区分读的页面到底是哪个服务器的

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

vim upload_file.php				##存储路径设置

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000000))				##文件大小设置
  {
  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";
  }
?>

测试:在浏览器输入172.25.16.1/index.php来查看
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值