nginx负载均衡的健康检查
时间:2022-05-06
本文章向大家介绍nginx负载均衡的健康检查,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
如果服务器组内有机器出现问题,nginx就不再向其转发请求了,那么nginx如何知道某台服务器是否能正常?
这就需要nginx对每台服务器进行健康检查
检查的方式有两种
(1)被动检查
向服务器转发请求失败,或者没有接收到响应,nginx就认为其不可用,会停止一段时间不再向其转发
默认规则是,如果失败了一次,就停止转发10秒钟
失败次数和停发时间是可以设定的,例如
upstream backend {
server backend1.example.com;
server backend2.example.com max_fails=3 fail_timeout=30s;
server backend3.example.com max_fails=2;
}
max_fails 允许失败的次数,超出后就认为不可用
fail_timeout max_fails次失败后,暂停的时间
(2)主动检查
定期向每台服务器发送检查请求,不必等到真实转发才判断
使用 health_check 指令实现,例如
upstream backend {
zone backend 64k;
server backend1.example.com;
......
}
server {
location / {
proxy_pass http://backend;
health_check;
}
}
注意,使用health_check的同时,也要使用zone指令
这个例子中使用了默认的健康检查规则,nginx每5秒向每台服务器发送请求"/",如果沟通失败、超时、返回状态码非2xx/3xx,就判断其不可用
health_check自定义配置
1)指定时间和次数
例如:
health_check interval=10 fails=3 passes=2;
interval 每10秒检查一次
fails 连续3次失败才认为服务器不可用
passes 连续2次成功请求才认为服务器已经可用
2)指定检查地址
health_check uri=/some/path;
默认检查的地址是"/",这里改为/some/path
例如server中配置的主机名为 http://backend1.example.com
检查的地址为 http://backend1.example.com/some/path
3)指定响应信息条件
match server_ok {
status 200-399;
header Content-Type = text/html;
body !~ "maintenance mode";
}
http {
match server_ok {
status 200-399;
header Content-Type = text/html;
body !~ "maintenance mode";
}
server {
location / {
......
health_check match=server_ok;
}
}
}
match指令可以让nginx检查响应的状态、头信息、响应体内信息
例如此例中指定 响应状态必须为200-399,Content-Type必须为text/html,响应体信息中不能含有"maintenance mode"
- Mototrbo TMS 协议分析(数字电台短信协议分析)
- Nginx 反向代理可以缓存 HTTP POST 请求页面吗?
- Spring boot with Hive
- Spring data 如何定义默认时间与日期
- Spring boot with Oauth2
- Elasticsearch Cluster 安装与配置
- 数据库结构版本控制
- 【Golang语言社区】LollipopGo框架之商城项目--路由设置
- "LollipopGo/library/lollipop/common" 测试3
- "LollipopGo/library/lollipop/common" 测试2
- Golang语言并发技术详解
- Golang语言社区--Go基础课程第一节聊聊Go语言
- Spring boot with ELK(Elasticsearch + Logstash + Kibana)
- 数据库与缓存
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- OpenCV图像拼接函数vconcat()&hconcat()
- JAVA自定义注解
- [ 物联网篇 ] 28 - Linux ES7210 Driver 调试
- [ 利器篇 ] - Microsoft Surface Pro 系列安装 Ubuntu 16.04 系统
- 如何优雅的打造 All-in One 仓库
- matplotlib绘图教程:设置标签与图例
- 企业是如何从头开发一个商业项目的?
- 基于Haproxy的高可用实战
- 组复制常规操作-分布式恢复 | 全方位认识 MySQL 8.0 Group Replication
- 赞!7000 字学习笔记,MySQL 从入到放弃
- 面试官问我Volatile的原理?从操作系统层面的设计怼回去!
- 设计原则之单一职责
- 设计原则之开闭原则
- SpringBoot执行跨域处理
- SpringBoot对全局异常的处理封装