在已安装的openresty上添加安装upstream模块报错的解决以及使用Consul服务发现时定时变更nginx的upstream的shell脚本

一、在已经安装好的openresty环境上添加安装upstream模块报错:

        在已经安装好的openresty环境上添加安装upstream模块报错:http upstream check module can not find any check server, make sure you ve added the check 的问题解决。

        服务器上已经安装好了openresty,并已搭建好了负载均衡的环境,但配置完后想查看后端的服务器的情况列表,发现没有好用的东西,之前一直使用nginx_upstream_check_module模块,非常好用: nginx模块nginx_upstream_check_module可检查后端服务器的健康情况及nginx安装时报错:Embed is required问题_checking for lua library ... not found-CSDN博客但又不能重装nginx,不然覆盖了我已经搭建好的这套环境,
    方法其实也很简单:就是安装的时候只要执行make不要执行make install。只需要在make编译完成之后将编译好的nginx二进制文件替换现在在用的nginx文件即可。当然要注意的是重新configure时要通过nginx -V将原来安装时的参数都带上。具体执行如下:

root@user19:/data01# cd /data01/downloads/; wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz
root@user19:/data01/downloads# mv v0.3.0.tar.gz nginx_upstream_check_module.0.3.0.tar.gz
root@user19:/data01/downloads# tar zxvf nginx_upstream_check_module.0.3.0.tar.gz
#add-module添加已经准备好的第三方模块
root@user19:/data01/downloads# ./configure \
--user=www-data \
--group=www-data \
--prefix=/data01/openresty \
--with-pcre \
--with-luajit \
--with-poll_module \
--with-http_ssl_module \
--with-http_perl_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--add-module=/data01/downloads/nginx_upstream_check_module-0.3.0
root@user19:/data01/downloads# make
#make安装完之后,build/nginx-1.15.8/objs/目录下的nginx文件即是我们要用的文件
root@user19:/data01/downloads/openresty-1.15.8.2# ls -l  build/nginx-1.15.8/objs/
total 14280
drwxr-xr-x 5 root root     4096 Nov  7 11:36 addon
-rw-r--r-- 1 root root    20433 Nov  7 11:36 autoconf.err
-rw-r--r-- 1 root root   128121 Nov  7 11:36 Makefile
-rwxr-xr-x 1 root root 14358888 Nov  7 11:38 nginx
-rw-r--r-- 1 root root     5361 Nov  7 11:38 nginx.8
-rw-r--r-- 1 root root     9682 Nov  7 11:36 ngx_auto_config.h
-rw-r--r-- 1 root root      657 Nov  7 11:36 ngx_auto_headers.h
-rw-r--r-- 1 root root    10822 Nov  7 11:36 ngx_modules.c
-rw-r--r-- 1 root root    62448 Nov  7 11:38 ngx_modules.o
drwxr-xr-x 9 root root     4096 Nov  7 11:36 src
root@user19:/data01/downloads/openresty-1.15.8.2# mv /data01/nginx/sbin/nginx /data01/nginx/sbin/nginx_old
root@user19:/data01/downloads/openresty-1.15.8.2# cp build/nginx-1.15.8/objs/nginx /data01/nginx/sbin/nginx

    add-module添加已经准备好的第三方模块,make安装完之后,build/nginx-1.15.8/objs/目录下的nginx文件即是我们要用的文件,可以再使用nginx -V查看是否已经安装好需要的模块,替换nginx文件后杀掉nginx重启之后即可。

    重启后访问发现报错:

http upstream check module can not find any check server, make sure you've added the check root@user19, client: 102.95.21.113, server: test.kermit.com, request: "GET /tmu_upstream_status HTTP/1.1", host:

        找到原因是 Nginx_upstream_check_module doesn’t work with nginx > 1.7.6。相关文章

https://www.ruby-forum.com/t/nginx-upstream-check-module-doesnt-work-with-nginx-1-7-6/241918

        也许有其它的办法的,比如这里有说过一些

https://github.com/yaoweibin/nginx_upstream_check_module/issues/77

        我也没有尝试,我这里也不着急解决,就先这样吧。

        不过最后在这个网址里看到好像有解决办法了:

http://mailman.nginx.org/pipermail/nginx/2012-September/035375.html

文章链接, 到了github上的一个patch修复链接

https://github.com/yaoweibin/nginx_upstream_check_module

        里面包含了对各个nginx版本做的处理比如:check_1.16.1+.patch,不过我用的是nginx1.17,我重新下载了这份文件安装,但是依然没有成功。或者需要等待1.17的patch吧。

二、使用Consul服务发现时定时变更nginx的upstream的shell脚本 

    这几年随着微服务架构的盛行,同时为了防止硬编码、容灾、水平扩缩容、提高运维效率等,后端服务越来越流行使用服务发现。

    什么是服务发现?服务发现是微服务框架体系中的一个重要模块。微服务化后,客户端需要调用服务端的模块更多,以前基本都是在配置文件中直接写IP地址,或者配置在数据库中。微服务化后就会出现难以维护的问题,因为服务的变化更多更频繁,麻烦!这时服务发现就来了,你只要向服务端说你要什么服务,然后服务器端给你返回一堆的IP地址和端口,调用这些地址就可以给你提供服务了。如下图:

    做服务发现的框架常用的有zookeeper,eureka,etcd,consul。其中有不少公司使用consul,consul是一个分布式的、高可用、横向扩展的提供服务发现的工具,可以通过DNS或HTTP接口提供服务注册和服务发现。架设起consul服务后只需要一个curl命令就可以列出后端的各个IP地址和端口,提取出这些IP端口更新到nginx的upstream后端IP中重启nginx即可。今天这里列出的就是这么一个shell代码,如下:

u07@t133:/opt/modules/nginx/sbin$ cat consul.sh 
#!/bin/bash
nowtime=`date +"%Y-%m-%d %H:%M:%S"`
path='/opt/modules/nginx/conf/vhosts/'
file='04007.com.conf'
sd lookup video.conapi | awk '{print "server "$1":"$2" weight=100;"}' > server.conf.new
linenum=`wc -l server.conf.new | awk '{print $1}'`
diff server.conf server.conf.new #> /dev/null
if [ $? == 0 ]; thenecho $nowtime":no need change" 
elseif [ $linenum -lt 50 ]; thenecho -n $nowtime":invalid data. linenum:"$linenumelseecho -n $nowtime":need change"cp -f $path$file $path$file.baksed '/server-list/r server.conf' $path$file.template > $path$file/opt/modules/nginx/sbin/nginx -t >/dev/null 2>&1if [ $? == 0 ]; then/opt/modules/nginx/sbin/nginx -s reload#rm -f server.conf#mv server.conf.new server.confecho -e "--reload nginx success.\n"echo ''elseecho -e "--nginx config error, give up.\n"fifi
fi
#将任务加到定时任务中去
u07@t133:/$ crontab -l
*/1 * * * * cd /opt/modules/nginx/sbin; ./consul.sh >> /opt/modules/nginx/logs/consul.log

    不过这种方法不是什么高大上的方法,不过在我这里够用了吧。资源足够可以使用dns动态解析,upstream直接配置成域名,通过内部DNS解析随时变换后端的服务IP地址,还有一个比较经济有效的方法,就是改造nginx,比如安装一些如dyups动态upstream的模块来实现。我这里暂时就不去尝试了。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

JavaWeb+Web服务器简介

一、Java Web 1.1 简介 Web,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源。 Java Web指的是使用Java技术开发的Web应用程序。Java在Web开发中有着广泛的应用,主要得益于其跨平台性、安全性和丰富的开发工具与框…

鼻咽癌中三级淋巴结构的单细胞与空间转录组分析|文献精析·24-09-22

小罗碎碎念 研究团队通过单细胞和空间转录组分析,揭示了与鼻咽癌进展和免疫治疗反应相关的三级淋巴结构。 作者角色作者姓名单位(中文)第一作者Yang Liu/通讯作者Jin-Xin Bei国家癌症中心南方肿瘤学重点实验室,鼻咽癌诊断治疗广东…

TryHackMe 第3天 | Pre Security (二)

该学习路径讲解了网络安全入门的必备技术知识,比如计算机网络、网络协议、Linux命令、Windows设置等内容。上一篇中简短介绍了计算机网络相关的知识,本篇博客将记录 网络协议 部分。 How the web works? DNS in detail DNS (Domain name system&…

『功能项目』QFrameWork更新道具图片UGUI【71】

我们打开上一篇70QFrameWork物品交换UGUI的项目, 在资源商店免费下载图片 创建Image重命名为Icon并且隐藏Name 给Icon一张随意道具图片Icon 重新绑定对象 接下来创建IItem.cs接口 与 ItemConfig.cs道具配置类 创建Config文件夹 创建脚本:ItemConfig.cs 编…

【416】【举报垃圾信息】

这题倒挺简单的 注意一下映射关系,再使用字典即可。 class Solution:def reportSpam(self, message: List[str], bannedWords: List[str]) -> bool:nlen(message)if n1:return Falsedictdefaultdict(int)num0for a in message:dict[a]1for b in bannedWords:if…

构建高效心理辅导平台:Spring Boot实践

1绪 论 1.1研究背景 随着计算机和网络技术的不断发展,计算机网络已经逐渐深入人们的生活,网络已经能够覆盖我们生活的每一个角落,给用户的网上交流和学习提供了巨大的方便。 当今社会处在一个高速发展的信息时代,计算机网络的发展…

安装黑群晖,并使用NAS公网助手实现DDNS动态域名解析

很多人都会安装安装一个黑群晖进行练手,黑群晖有很多玩法和NAS套件,而且黑群晖安装比较简单,没有复杂的步骤,这也是很多人玩黑裙的理由,这里教大家如何安装黑群晖,并且安装神卓互联NAS公网助手实现DDNS动态…

【STM32】 TCP/IP通信协议(1)

一、前言 TCP/IP是干啥的?它跟SPI、IIC、CAN有什么区别?它如何实现stm32的通讯?如何去配置?为了搞懂这些问题,查询资料可解决如下疑问: 1.为什么要用以太网通信? 以太网(Ethernet) 是指遵守 IEEE 802.3 …

VisionPro - 基础 - 模板匹配技术和在VP中的使用 - PMAlign - PatMax (5)- 非线性模板变形匹配

前言: 本机继续对VP的PatMax 算子进行说明:本节讲非线性变形的模板匹配。 Non-Linear Pattern Deformation By default, PatMax requires that each boundary point in the instance of a pattern found in a run-time image closely correspond to a b…

Java 使用递归方法遍历B站下载文件并解析重命名

目录 背景 操作方法 声明 背景 出于学习和日常使用方便的目的,且考虑到有的资源过一段时间会失效,所以有时会下载B站的音频,视频,进行存放保留,下面介绍下载和下载之后解析文件的方法,仅供学习…

C++20中头文件compare的使用

<compare>是C20中新增加的头文件&#xff0c;此头文件是language support库的一部分。它包括&#xff1a;concepts、classes、customization point objects、functions。 1.concepts&#xff1a;三向比较运算符<>&#xff0c;目的是简化比对对象的过程&#xff0c;…

【编程实践】利用高德地图开放平台制作简易地图规定半径范围

需求分析 [little demo] 使用高德地图API创建一个显示特定半径范围的简易地图。 注册高德开放平台账号&#xff0c;获取API Key。&#xff08;精度要求不高可不需要&#xff09; 创建HTML页面&#xff0c;引入高德地图API。 设置地图中心点和初始缩放级别。 编写代码绘制指定半…

本地电脑基于nginx的https单向认证和双向认证(自制证书+nginx配置)保姆级

目录 1、背景 2、运行环境 3、工具下载 3.1、OpenSSL下载 3.2、nginx下载 4、制作https证书&#xff1a; 4.1、CA与自签名&#xff1a; 4.2、制作CA根证书&#xff08;公钥&#xff09; 4.3、制作服务端证书&#xff1a; 4.4、制作客户端证书&#xff1a; 4.5、制作…

初识ZYNQ——FPGA学习笔记15

一、ZYNQ简介 ZYNQ&#xff1a;Zynq-7000 All Programmable SoC&#xff08;APSoC&#xff09;&#xff0c;赛灵思公司&#xff08;AMD Xilinx&#xff09;推出的新一代全可编程片上系统 PS&#xff1a;Processing System&#xff0c;处理系统 PL&#xff1a;Program Logic&…

828华为云征文 | 构建高效搜索解决方案,Elasticsearch Kibana的完美结合

前言 构建高效搜索解决方案&#xff0c;FlexusX服务器与Elasticsearch & Kibana的完美结合&#xff0c;为企业带来云端搜索新体验。FlexusX实例以其卓越性能与灵活扩展性&#xff0c;确保高并发搜索的流畅运行。部署Elasticsearch&#xff0c;享受分布式搜索的精准与快速&a…

MySQL:SQL语句执行过程

本篇文章会分析下一个 SQL 语句在 MySQL 中的执行流程&#xff0c;包括 SQL 的查询在 MySQL 内部会怎么流转&#xff0c;SQL 语句的更新是怎么完成的。 在分析之前我会先带着你看看 MySQL 的基础架构&#xff0c;知道了 MySQL 由那些组件组成以及这些组件的作用是什么&#xf…

9.22今日错题解析(软考)

前言 这是用来记录我每天备考软考设计师的错题的&#xff0c;大部分错题摘自希赛中的题目&#xff0c;但相关解析是原创&#xff0c;有自己的思考&#xff0c;为了复习&#xff1a;&#xff09;&#xff0c;最后希望各位报考软考的小伙伴都能上岸&#xff01;&#xff01;&…

掌上高考爬虫逆向分析

目标网站 aHR0cHM6Ly93d3cuZ2Fva2FvLmNuL3NjaG9vbC9zZWFyY2g/cmVjb21zY2hwcm9wPSVFNSU4QyVCQiVFOCU4RCVBRg 一、抓包分析 二、逆向分析 搜索定位加密参数 本地生成代码 var CryptoJS require(crypto-js) var crypto require(crypto);f "D23ABC#56"function v(t…

Redis数据结构之set

一.set集合特性 集合类型也是保存多个字符串类型的元素的&#xff0c;但和list列表不一样&#xff0c;集合中的元素是无序的&#xff0c;而且元素不能够重复&#xff0c;不仅支持增删查改&#xff0c;还支持交集并集等操作 二.相关命令 1.sadd sadd key members…… 咱们把…

华为HarmonyOS地图服务 9 - 如何在地图上绘制多边形?

场景介绍 本章节将向您介绍如何在地图上绘制多边形。 接口说明 添加多边形功能主要由MapPolygonOptions、addPolygon和MapPolygon提供&#xff0c;更多接口及使用方法请参见接口文档。 接口名 描述 MapPolygonOptions 用于描述MapPolygon属性。 addPolygon(options: mapC…