nginx主动检测后端健康模块

一、前言

     nginx也有自带的后端检测模块ngx_http_upstream_module,该模块可以做到基本的健康检查,因为该健康检查是被动的,当nginx有请求后,才会对后端服务进行健康检测,当检测到有故障时会将这个请求转发到正常的后端服务中,所以该模块不太适用,因此引入第三方的主动健康检测模块ngx_http_upstream_check_module,该模块会在时间间隔内对后端进行主动的健康检测,当发现不健康的后端服务时,会将其主动下线,不再接受请求

二、部署

创建nginx存放目录

mkdir /opt/nginx && cd /opt/nginx

下载安装包

wget http://nginx.org/download/nginx-1.20.2.tar.gz

解压安装包

tar -zxvf nginx-1.20.2.tar.gz

下载需要增加的模块

git clone https://github.com/yaoweibin/nginx_upstream_check_module.git

将该模块导入到nginx中

cd /opt/nginx/nginx-1.20.2
patch -p1 < /opt/nginx/nginx_upstream_check_module/check_1.20.1+.patch

安装编译的环境

yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

设置参数并编译安装

./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp  --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=/opt/nginx/nginx_upstream_check_module
make && make install

创建参数中设定的目录,有一个目录nginx中没有

mkdir -p /var/cache/nginx/client_temp

使用systemd管理nginx

vi /etc/systemd/system/nginx.service

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target

启动nginx服务

systemctl start nginx && systemctl enable nginx

检查是否开启对应模块

nginx -V

配置使用nginx主动健康检测 模块

vi /etc/nginx/nginx.conf

upstream dev_web {server 10.1.60.125:30003;server 10.1.60.126:30003;server 10.1.60.127:30003;server 10.1.60.128:30003;check interval=3000 rise=1 fall=3 timeout=2000 type=http;  #配置http检测,该接口为前端web接口,所以配置http检测check_http_send "HEAD /login.html HTTP/1.0\r\n\r\n";#check_http_send "HEAD /login.html HTTP/1.1\r\nConnection: keep-alive\r\n\r\n";  #需要看http协议是多少,需要根据http协议填写,不同的协议使用的方法不一样#check_http_send "GET /login.html HTTP/1.1\r\nConnection: keep-alive\r\n\r\n";check_http_expect_alive http_2xx http_3xx;  #检测返回状态码为2xx、3xx代表正常
}upstream dev_gateway {server 10.1.60.125:30004;server 10.1.60.126:30004;server 10.1.60.127:30004;server 10.1.60.128:30004;check interval=3000 rise=1 fall=3 timeout=2000 type=tcp;  #配置tcp/ip检测,接口为后端服务接口,所以配置tcp/ip检测
}server {listen       80;location =/ {proxy_pass http://dev_web;}location =/login.html {proxy_pass http://dev_web;}location ~* \.(?:htm|html)$ {proxy_pass http://dev_web;}location ~* \.(?:ico|git|jpg|jpeg|png|bmp|swf|flv|mp4)$ {proxy_pass http://dev_web;}location ~* \.(?:css|js|eot|svg|ttf|woff2|otf|woff)$ {proxy_pass http://dev_web;}location / {proxy_set_header x-for $http_x_forwarded_for;proxy_set_header X-Forwaided-Proto $scheme;proxy_set_header Host              $host:$server_port;proxy_set_header X-Real-IP         $remote_addr;proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Host  $host;proxy_buffering off;client_max_body_size 200m;client_body_buffer_size 50m;proxy_pass http://dev_gateway;}location /status {check_status;     #开启健康检查的web页面}
}

interval:表示间隔多少毫秒检测一次

rise:表示最少健康检测通过多少次代表正常

fall:表示最少健康检测不通过多少次代表不正常

type:健康检测使用的协议

可以使用curl命令查看http协议的版本

curl -I 10.1.60.125:30003/login.html  #可以使用-I代表支持HEAD方式,不支持的话可以使用get方式

重新加载nginx配置

nginx -s reload

 查看健康检测的web

http://10.1.60.124/status

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/509178.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot的助农管理系统的设计与实现

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一 、设计说明 1.1研究背…

yolov8-更换卷积模块-ContextGuidedBlock_Down

源码解读 class ContextGuidedBlock_Down(nn.Module):"""the size of feature map divided 2, (H,W,C)---->(H/2, W/2, 2C)"""def __init__(self, nIn, dilation_rate2, reduction16):"""args:nIn: the channel of input fea…

保护模式笔记九 中断门和IDT(中断描述符表)

保护模式笔记九 中断门和IDT(中断描述符表) https://www.52pojie.cn/thread-1455684-1-1.html (出处: 吾爱破解论坛) 前言 所有保护模式索引链接&#xff1a;保护模式笔记一 保护模式介绍 前面学习了调用门之后继续学习中断门 中断门 中断门的作用 先前学习的调用门在实际…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于条件风险价值的虚拟电厂参与能量及备用市场的双层随机优化》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 这篇文章的标题涉及到以下几个关键点…

SQL入门教程参考

参考 SQL视频教程 LintCode 炼码 - ChatGPT&#xff01;更高效的学习体验&#xff01; SQL基础教程 SQL 教程 SQL 教程2 SQL教程 - 廖雪峰的官方网站 史上最全SQL基础知识总结(理论举例)-CSDN博客 数据库表基础操作 首先数据库表必掌握的基础操作&#xff0c;建表、删表、…

PyTorch-神经网络

神经网络&#xff0c;这也是深度学习的基石&#xff0c;所谓的深度学习&#xff0c;也可以理解为很深层的神经网络。说起这里&#xff0c;有一个小段子&#xff0c;神经网络曾经被打入了冷宫&#xff0c;因为SVM派的崛起&#xff0c;SVM不了解的同学可以去google一下&#xff0…

OpenCV 4基础篇| OpenCV图像的拆分和合并

目录 1. 通道拆分1.1 cv2.split1.1.1 语法结构1.1.2 注意事项1.1.3 代码示例 1.2 NumPy切片1.2.1 代码示例 2. 通道合并2.1 cv2.merge2.1.1 语法结构2.1.2 注意事项2.1.3 代码示例 1. 通道拆分 1.1 cv2.split 1.1.1 语法结构 b,g,r cv2.split(img[, mv]) #图像拆分为 BGR 通…

【Simulink系列】——控制系统仿真基础

声明&#xff1a;本系列博客参考有关专业书籍&#xff0c;截图均为自己实操&#xff0c;仅供交流学习&#xff01; 一、控制系统基本概念 这里就不再介绍类似于开环系统、闭环系统等基本概念了&#xff01; 1、数学模型 控制系统的数学模型是指动态数学模型&#xff0c;大致…

程序员的金三银四求职宝典:如何在关键时期脱颖而出?

个人主页&#xff1a;17_Kevin-CSDN博客 随着春天的脚步渐近&#xff0c;程序员们的求职热潮也随之而来。在这个被称为“金三银四”的招聘季&#xff0c;如何从众多求职者中脱颖而出&#xff0c;成为了许多程序员关注的焦点。本文将为你提供一份全面的求职宝典&#xff0c;助你…

【JMeter】 二次开发插件开发 Dubbo 接口测试插件浅析

概述 在一些企业中&#xff0c;各类业务系统非常丰富&#xff0c;相互之间或对外提供很多的服务或接口这些服务或接口中&#xff0c;有很多是需要强契约约束的&#xff0c;服务的提供方、服务的使用方必须遵守相同契约这类服务最典型的就是RPC&#xff0c;其中应用广泛的有Dub…

Vue3中Vuex状态管理库学习笔记

1.什么是状态管理 在开发中&#xff0c;我们会的应用程序需要处理各种各样的数据&#xff0c;这些数据需要保存在我们应用程序的某个位置&#xff0c;对于这些数据的管理我们就称之为状态管理。 在之前我们如何管理自己的状态呢&#xff1f; 在Vue开发中&#xff0c;我们使用…

Linux设备模型(十一) - platform设备

一&#xff0c;platform device概述 在Linux2.6以后的设备驱动模型中&#xff0c;需关心总线、设备和驱动这3个实体&#xff0c;总线将设备和驱动绑定。在系统每注册一个设备的时候&#xff0c; 会寻找与之匹配的驱动&#xff1b;相反的&#xff0c;在系统每注册一个设备的时…