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"
- 【Go 语言社区】Redis(ZADD)简单排名
- C得到文件的大小
- 【Go 语言社区】Go语言实现选择法排序实例
- 【Go 语言社区】Go语言转换所有字符串为大写或者小写的方法
- Go语言按字节截取字符串的方法
- Go语言中字符串的查找方法小结
- 优化算法——遗传算法
- 每秒执行6000的简单SQL优化(一)(r10笔记第62天)
- 【Go 语言社区】在golang里实现类似try catch 的异常处理机制
- 每秒执行6000的简单SQL优化(二) (r10笔记第65天)
- 【Go 语言社区】GO语言练习:网络编程 ICMP 示例
- Golang的json操作
- 【Go 语言社区】golang协程——通道channel阻塞
- Oracle 12c PDB中碰到的DG问题 (r10笔记第63天)
- 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 数组属性和方法
- Ubuntu 17.04系统下源码编译安装opencv的步骤详解
- 如何在Linux中自定义bash命令提示符
- 详解如何在Linux上一次性批量重命名一组文件
- 虚拟机中centos修改时间的方法
- Ubuntu 18.04 Server 设置静态IP 的方法
- 嵌入式Linux重启QT应用程序的简单办法(基于QT4.8 qws)
- CentOS下MySQL的彻底卸载的几种方法
- centos7中安装Android SDK的方法步骤
- centos配置ssh免密码登录后仍要输入密码的解决方法
- CentOS7.2安装Nginx的方法步骤
- CentOS安装Python2.7与Python2.6并存的方法
- 详解Centos下YUM安装PHP的两种方式
- linux下make命令实现输出高亮的方法
- Ubuntu彻底卸载MySQL、Apache2和Php的方法教程
- linux下如何创建守护进程的步骤