让我看看是谁还没学会HAProxy七层代理!

目录

1.四层负载均衡:

2.七层负载均衡:

3. 四层和七层的区别

4.HAProxy的安装和服务信息

4.1 实验环境

4.2 软件安装

4.3 haproxy的基本配置信息

4.3.1 多进程和线程

4.4 proxies配置

4.4.1defaults:

4.4.2 backup:

4.4.3 disable:

4.5 socket

5.haproxy的算法

5.1 静态算法

5.1.1 static-rr:基于权重的轮询调度

5.2 动态算法

5.2.1 roundrobin

5.2.2 leastconn

5.3 其他算法

5.3.1 source

5.3.2 hash

5.3.3 uri

6. HAProxy状态页

6.1 状态页配置项

 6.2 启用状态页

编辑

7.cookie

8. IP透传

8.1七层透传

8.2 四层透传

9.ACL(访问控制技术)

9.1.1以什么结尾:

 9.1.2 以什么开头:

9.2 ACL-operator 具体操作符

 9.2.1 end

9.2.2 base

9.2.3 path

9.2.4基于域名匹配====

 9.2.5基于IP匹配====

9.2.6基于源地址访问====

浏览器类型====

====

9.2.7基于文件后缀动静分离====

9.2.8基于访问路径====

====

9.2.9基于自定义的错误页面文件====

9.2.9.1 errorfile====

​编辑 9.2.9.2 errorloc====

10.HAProxy四层负载

11.HAProxy http加密访问(制作证书和密钥)

12.全站加密

全局配置:


1.四层负载均衡:

1. 通过 ip+port 决定负载均衡的去向。
2. 对流量请求进行 NAT 处理,转发至后台服务器。
3. 记录 tcp udp 流量分别是由哪台服务器处理,后续该请求连接的流量都通过该服务器处理。
4. 支持四层的软件
 lvs :重量级四层负载均衡器。
 Nginx :轻量级四层负载均衡器,可缓存。( nginx 四层是通过 upstream 模块)
 Haproxy :模拟四层转发。

2.七层负载均衡:

1. 通过虚拟 ur| 或主机 ip 进行流量识别,根据应用层信息进行解析,决定是否需要进行负载均衡。
2. 代理后台服务器与客户端建立连接,如 nginx 可代理前后端,与前端客户端 tcp 连接,与后端服务器建立tcp连接 ,
3. 支持 7 层代理的软件:
 Nginx: 基于 http 协议 (nginx 七层是通过 proxy_pass)
 Haproxy: 七层代理,会话保持、标记、路径转移等。

3. 四层和七层的区别

所谓的四到七层负载均衡,就是在对后台的服务器进行负载均衡时, 依据四层的信息或七层的信息来决 定怎么样转发流量 四层的负载均衡,就是通过发布三层的IP 地址( VIP ),然后加四层的端口号,来决定哪些流量需要做负载均衡,对需要处理的流量进行NAT 处理,转发至后台服务器,并记录下这个 TCP 或者 UDP 的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理 七层的负载均衡,就是在四层的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,比如同一个Web 服务器的负载均衡,除了根据 VIP 80 端口辨别是否需要处理的流量,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。
1. 分层位置 : 四层负载均衡在传输层及以下,七层负载均衡在应用层及以下
2. 性能 : 四层负载均衡架构无需解析报文消息内容,在网络吞吐量与处理能力上较高 : 七层可支持解析应用层报文消息内容,识别URL Cookie HTTP header 等信息。、
3. 原理 : 四层负载均衡是基于 ip+port; 七层是基于虚拟的 URL 或主机 IP 等。
4. 功能类比 : 四层负载均衡类似于路由器 ; 七层类似于代理服务器。
5. 安全性 : 四层负载均衡无法识别 DDoS 攻击 ; 七层可防御 SYN Cookie/Flood 攻击。

4.HAProxy的安装和服务信息

4.1 实验环境

主机名haproxy.lab.example.comwebserver1.lab.example.comwebserver2.lab.exampe.com
IP192.168.0.100/24192.168.0.10/24192.168.0.20/24
网卡eth0eth0eth0

4.2 软件安装

webserver1和webserver2都装nginx:

启动服务、关防火墙:

在haproxy上下载haproxy:

4.3 haproxy的基本配置信息

HAProxy 的配置文件 haproxy.cfg 由两大部分组成,分别是:
global :全局配置段
  进程及安全配置相关的参数
  性能调整相关参数
  Debug 参数
proxies :代理配置段
  defaults :为 frontend, backend, listen 提供默认配置
  frontend :前端,相当于 nginx 中的 server {}
  backend :后端,相当于 nginx 中的 upstream {}
  listen :同时拥有前端和后端配置 , 配置简单 , 生产推荐使用

此时可访问:

但如果:

此时再curl:

可发现效果一样。

4.3.1 多进程和线程

一个进程:

多个进程:

查看线程数量:

多线程参数和多进程参数是互斥的,不能同时使用。

同时使用会报错:

生成日志文件:

# vim /etc/rsyslog.conf

#vim /etc/haproxy/haproxy.cfg

成功~

注意:要先重启rsyslog.service,再重启haproxy!

4.4 proxies配置

4.4.1defaults:

dontlognull:空连接

http-keep-alive:保持长对话

timeout http-request:等待客户端请求完全被接收和处理的最长时间

timeout- queue:设置删除连接和客户端不可用服务提示的等待时间

timeout check:后端服务器健康检查的超级时间

改端口号:

echo "sorry 下班了" > /var/www/html/index.html

4.4.2 backup:

4.4.3 disable:

此时webserver1就下线了。

#systemctl restart nginx

此时去浏览器输入:172.25.254.100 出来的是www.baidu.com

 

webserver1和webserver2测试:

#while true; do curl 172.25.254.100;done

4.5 socket

可以看见权限:

设置、查看权重:

测试:

5.haproxy的算法

5.1 静态算法

静态算法:按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、连接数和响应速度
等,且无法实时修改权重 ( 只能为 0 1, 不支持其它值 ) ,只能靠重启 HAProxy 生效。

5.1.1 static-rr:基于权重的轮询调度

有问题,所以取消多进程:

成功。

5.1.2 first

1.根据服务器在列表中的位置,自上而下进行调度
2.其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务
3.其会忽略服务器的权重设置
4.不支持用 socat 进行动态修改权重 , 可以设置 0 1, 可以设置其它值但无效

5.2 动态算法

5.2.1 roundrobin

5.2.2 leastconn

5.3 其他算法

5.3.1 source

5.3.2 hash

5.3.3 uri

6. HAProxy状态页

6.1 状态页配置项

stats enable # 基于默认的参数启用 stats page
stats hide-version # 将状态页中 haproxy 版本隐藏
stats refresh <delay> # 设定自动刷新时间间隔,默认不自动刷新
stats uri <prefix> # 自定义 stats page uri ,默认值: /haproxy?stats
stats auth <user>:<passwd> # 认证时的账号和密码,可定义多个用户 , 每行指定一个用户
# 默认: no authentication
stats admin { if | unless } <cond> # 启用 stats page 中的管理功能

 6.2 启用状态页

7.cookie

浏览器访问:

8. IP透传

8.1七层透传

不透传时:

透传重要参数:forwardfor

当没有这个参数时:

重启服务后:

当有这个参数时:

[root @webserver1 ~]# cat /etc/httpd/logs/access_log

8.2 四层透传

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

做设定:

重启服务后:

因为是直接处理的流量,所以被拒绝了。

或者:

此时添加一个参数:

装apache的手册:

9.ACL(访问控制技术)

看数据报文:

#curl -v 192.168.0.100

 演示

要做本地解析:

9.1.1以什么结尾:

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

 

 

 9.1.2 以什么开头:

9.2 ACL-operator 具体操作符

整数比较: eq ge gt le lt
字符比较:
- exact match (-m str) : 字符串必须完全匹配模式
- substring match (-m sub) : 在提取的字符串中查找模式,如果其中任何一个被发现, ACL 将匹配
- prefix match (-m beg) : 在提取的字符串首部中查找模式,如果其中任何一个被发现, ACL 将匹配
- suffix match (-m end) : 将模式与提取字符串的尾部进行比较,如果其中任何一个匹配,则 ACL 进行 匹配
- subdir match (-m dir) : 查看提取出来的用斜线分隔( “/" )的字符串,如其中任一个匹配,则 ACL 进行匹配
- domain match (-m dom) : 查找提取的用点( “." )分隔字符串,如果其中任何一个匹配,则 ACL 进行匹配

 9.2.1 end

9.2.2 base

9.2.3 path

9.2.4基于域名匹配====

 9.2.5基于IP匹配====

拒绝:

9.2.6基于源地址访问====

浏览器类型====

====

[root@webserver1 ~]# dnf install php -y

[root@webserver1 ~]# systemctl restart httpd
[root@webserver1 ~]# vim /var/www/html/index.php

<?php
        phpinfo();
?>

 

9.2.7基于文件后缀动静分离====

9.2.8基于访问路径====

[root@webserver2 ~]# mkdir /usr/share/nginx/html/static -p
[root@webserver2 ~]# echo static - 192.168.0.20 > /usr/share/nginx/html/static/index.html

[root@webserver1 ~]# mkdir -p /var/www/html/php
[root@webserver1 ~]# cp /var/www/html/index.php /var/www/html/php/ 

 

====

listen stats
   mode http
   bind 0.0.0.0:9999
   stats enable
   stats refresh 3
   stats uri /status
   stats auth huola:huola

frontend webcluster
    bind *:80
    mode http
    acl static  path_sub  -m sub  static
    acl php    path_sub   -m sub  php

 ##########################################

    use_backend webcluster-host if   php

    default_backend default-host

backend webcluster-host
    mode http
    server web1 192.168.0.10:80 check inter 2 fall 2 rise 5

backend default-host
    mode http
    server web2 192.168.0.20:80 check inter 2 fall 2 rise 5

[root@haproxy ~]# systemctl restart haproxy.service

 

不同路径访问的不同的网站。  

9.2.9基于自定义的错误页面文件====

9.2.9.1 errorfile====

获取一下:

可以看见:

演示:

[root@haproxy ~]# cat /etc/haproxy/errorpage/badpage.http
HTTP/1.0 503 Service Unavaliable
Cache-Control: no-cache
Connection: close
Content-Type: text/html;charset=UTF-8

<html><body><h1>什么动物生气最安静</h1>
男人!!!
</body></html>

 

[root@haproxy ~]# systemctl restart haproxy.service
[root@haproxy ~]# systemctl restart httpd
 

 

 9.2.9.2 errorloc====

[root@haproxy ~]# systemctl restart haproxy.service

 

10.HAProxy四层负载

[root@webserver1 ~]# dnf install mariadb-server -y

[root@webserver2 ~]# dnf install mariadb-server -y

当id=1:

[root@webserver1 ~]# systemctl start mariadb

当id=2:

[root@webserver2 ~]# systemctl start mariadb

webserver1:

webserver2:

haproxy:

查看:

 

11.HAProxy http加密访问(制作证书和密钥)

证书已完成。

 key🆗啦~

查看密钥:

改配置参数:

[root@haproxy ~]# systemctl restart haproxy.service

 

12.全站加密

全局配置:

[root@haproxy ~]# vim /lib/systemd/system/haproxy.service

可以看到指定了三个变量:  

状态页:

 

所以在子配置文件也生效。

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值