当前位置: 首页 > article >正文

【HAProxy09】企业级反向代理HAProxy高级功能之压缩功能与后端服务器健康性监测

HAProxy 高级功能

介绍 HAProxy 高级配置及实用案例

压缩功能

对响应给客户端的报文进行压缩,以节省网络带宽,但是会占用部分CPU性能

建议在后端服务器开启压缩功能,而非在HAProxy上开启压缩

注意:默认Ubuntu的包安装nginx开启压缩功能

配置选项

compression algo  <algorithm> ...           #启用http协议中的压缩机制,常用算法有gzip,deflate

#压缩算法<algorithm>支持下面类型:
  identity                                  #debug调试使用的压缩方式
  gzip                                      #常用的压缩方式,与各浏览器兼容较好
  deflate                                   #有些浏览器不支持
  raw-deflate                               #新式的压缩方式
compression type <mime type> ...            #要压缩的文件类型MIME


 #示例:
compression algo gzip deflate
compression type compression type text/plain text/html text/css text/xml text/javascript application/javascript

配置示例

listen  web_host
  bind 10.0.0.7:80
  mode http
  balance  roundrobin
  log global
  option httplog
  compression algo gzip deflate   #启用压缩和指定算法
  compression type compression type text/plain text/html text/css text/xml text/javascript application/javascript    #指定压缩文件类型         
  server web1 10.0.0.17:80  cookie web1 check inter 3000 fall 3 rise 5
  server web2 10.0.0.27:80  cookie web2 check inter 3000 fall 3 rise 5


#后端服务器准备一个文本文件
[root@web01 html]#ll -h
total 1.2M
-rw-r--r-- 1 nginx nginx 1.2M Nov 12 18:08 1.txt

验证压缩功能

--compressed:这个选项告诉 curl 请求服务器发送压缩的响应(如果服务器支持的话)。通常,服务器会使用 gzip 或 deflate 算法压缩数据以减少传输时间。

[root@master-db ~]#curl -b /root/cookie.txt 172.16.1.211/1.txt -Iv --compressed 
* About to connect() to 172.16.1.211 port 80 (#0)
*   Trying 172.16.1.211...
* Connected to 172.16.1.211 (172.16.1.211) port 80 (#0)
> HEAD /1.txt HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 172.16.1.211
> Accept: */*
> Accept-Encoding: deflate, gzip
> Cookie: WEBSRV=web01

没开启压缩功能前

 

开启压缩功能后

后端服务器健康性监测

三种状态监测方式

基于四层的传输端口做状态监测,此为默认方式
基于指定 URI 做状态监测,需要访问整个页面资源,占用更多带宽
基于指定 URI 的 request 请求头部内容做状态监测,占用较少带宽,建议使用此方式 

基于应用层http协议进行健康性检测

基于应用层http协议,采有不同的监测方式,对后端real server进行状态监测

注意: 此方式会导致在后端服务器生成很多的HAProxy发起的访问日志

option httpchk    #支持Listen和backendf块,启用七层健康性检测,对tcp 和 http 模式都支持,默认为:OPTIONS / HTTP/1.0,nginx默认不支持OTIONS
option httpchk <uri>
option httpchk <method> <uri>
option httpchk <method> <uri> <version>
#期望以上检查得到的响应码
http-check expect [!] <match> <pattern>
#示例:
http-check expect status 200
http-check expect ! rstatus ^5 #支持正则表达式
#关于HTTP/1.1的说明
<version> is the optional HTTP version string. It defaults to "HTTP/1.0" but 
some servers might behave incorrectly in HTTP 1.0, so turning it to HTTP/1.1 may 
sometimes help. Note that the Host field is         mandatory in HTTP/1.1, and 
as a trick, it is possible to pass it after "\r\n" following the version string.

配置示例

listen  web_host
  bind 10.0.0.7:80
  mode http
  balance  roundrobin
 #option httpchk GET /monitor/check.html               #默认HTTP/1.0
 #option httpchk GET /monitor/check.html HTTP/1.0
 #option httpchk GET /monitor/check.html HTTP/1.1      #注意:HTTP/1.1强制要求必须有Host字段

  option httpchk HEAD  /monitor/check.html HTTP/1.1\r\nHost:\ www.wang.org #使用HEAD减少网络流量,新版不支持\r\nHost:\ www.wang.org
  http-check send hdr Host www   #注意:新版要求:HTTP/1.1强制要求必须有Host字段
  cookie  SERVER-COOKIE  insert  indirect nocache
  server web1 10.0.0.17:80  cookie web1 check inter 3000 fall 3 rise 5
  server web2 10.0.0.27:80  cookie web2 check inter 3000 fall 3 rise 5
 #在所有后端服务建立检测页面
[root@backend ~]#mkdir /var/www/html/monitor/
 [root@backend ~]#echo  monitor > /var/www/html/monitor/check.html
 #关闭一台Backend服务器
[root@backend1 ~]#systemctl stop httpd

验证http监测

查看到状态页,可以看到启用了七层检测功能:LastChk字段:L7  

listen www.web01.com
  balance roundrobin
  bind 0.0.0.0:80
  log global
  option httplog
  option httpchk HEAD  / HTTP/1.1\r\nHost:\ www.web01.com
  cookie WEBSRV insert nocache indirect
  server 10.0.0.52 10.0.0.52:80  check  inter 3000 fall 3 rise 5 cookie web01
  server 10.0.0.53 10.0.0.53:80  check  inter 3000 fall 3 rise 5 cookie web02

 


http://www.kler.cn/a/394307.html

相关文章:

  • sfnt-pingpong -测试网络性能和延迟的工具
  • 第146场双周赛:统计符合条件长度为3的子数组数目、统计异或值为给定值的路径数目、判断网格图能否被切割成块、唯一中间众数子序列 Ⅰ
  • 应用端sql慢查询监控分析
  • R型+I型+J型指令
  • Chrome 浏览器原生功能截长屏
  • AIGC-------AI生成内容如何赋能AR和VR体验?
  • 图形 2.6 伽马校正
  • 详解一下JVM诊断方法和其工具的使用
  • 如何进行产线高阶能耗数据的计算和可视化?
  • Rust 布尔类型
  • c语言——指针
  • HAproxy 详解
  • 【计算机网络五】HTTP协议!网站运行的奥秘!
  • day06(单片机)IIC+STH20
  • 管家婆工贸ERP BR001.供应商价格分析
  • [CKS] K8S RuntimeClass SetUp
  • 【AI声音克隆整合包及教程】第二代GPT-SoVITS V2:技术、应用与伦理思考
  • 实验5:网络设备发现、管理和维护
  • 知识图谱6:neo4j查询语句
  • 后端SpringBoot学习项目-项目基础搭建
  • Tomcat 和 Netty 的区别及应用场景分析
  • Ubuntu中禁止MySQL服务自启动
  • 【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的到家护理服务平台的设计与实现
  • OpenWebUI,RAG+外部知识库+AI写文的开源应用
  • STM32的系统结构、内核、外围设备(外设)、单片机外围电路
  • 【大数据技术基础 | 实验十一】Hive实验:新建Hive表