nginx编译安装_Nginx编译安装nginx-upsync-module模块以实现动态负载

安装依赖包

OpenSSL

在官网下载页下到最新稳定版1.0.2q。

PCRE

在 PCRE 官网可以找到下载地址,这里选择8.x的最高版本 pcre-8.42.tar.gz。

zlib

zlib 直接选择官网首页最新的zlib-1.2.11.tar.gz。

下载nginx 源码包及nginx-upsync-module模块源码

这里下载的是nginx稳定版nginx-1.14.2.tar.gz,nginx-upsync-module模块源码使用git clone https://github.com/weibocom/nginx-upsync-module.git下载。解压之后进入源码目录执行

./configure --sbin-path=/usr/local/opt/nginx --conf-path=/usr/local/etc/nginx/nginx.conf --pid-path=/usr/local/opt/nginx/nginx.pid --prefix=/usr/local/opt/nginx --with-http_ssl_module --add-module=/work/tools/nginx-modules/nginx-upsync-module --with-openssl=/work/tools/openssl-1.0.2q --with-pcre=/work/tools/pcre-8.42 --with-zlib=/work/tools/zlib-1.2.11makemake install

查看文件auto/options可以看到全部的参数,下面是一些常用配置参数的含义:

--prefix #nginx安装目录,默认在/usr/local/nginx--pid-path #pid问件位置,默认在logs目录--lock-path #lock问件位置,默认在logs目录--with-http_ssl_module #开启HTTP SSL模块,以支持HTTPS请求。--with-http_dav_module #开启WebDAV扩展动作模块,可为文件和目录指定权限--with-http_flv_module #支持对FLV文件的拖动播放--with-http_realip_module #支持显示真实来源IP地址--with-http_gzip_static_module #预压缩文件传前检查,防止文件被重复压缩--with-http_stub_status_module #取得一些nginx的运行状态--with-mail #允许POP3/IMAP4/SMTP代理模块--with-mail_ssl_module #允许POP3/IMAP/SMTP可以使用SSL/TLS--with-pcre=../pcre-8.11 #注意是未安装的pcre路径--with-zlib=../zlib-1.2.5 #注意是未安装的zlib路径--with-debug #允许调试日志--http-client-body-temp-path #客户端请求临时文件路径--http-proxy-temp-path #设置http proxy临时文件路径--http-fastcgi-temp-path #设置http fastcgi临时文件路径--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi #设置uwsgi 临时文件路径--http-scgi-temp-path=/var/tmp/nginx/scgi #设置scgi 临时文件路径: 

在make的时候报错

ld: symbol(s) not found for architecture i386clang: error: linker command failed with exit code 1 (use -v to see invocation)make[4]: *** [link_app.] Error 1make[3]: *** [openssl] Error 2make[2]: *** [build_apps] Error 1make[1]: *** [/user/local/openssl-1.0.2q/.openssl/include/openssl/ssl.h] Error 2make: *** [build] Error 2

这个是因为我先前装了别的版本的openssl导致的,查看Nginx源码目录文件auto/lib/openssl/conf,可以发现代码:

CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"

实际的openssl源码目录是没有.openssl目录的,ssl.h文件是在openssl源码目录的include/openssl/目录下的,libssl.a 和libcrypto.a是在openssl源码根目录下的。将此文件修改为:

CORE_INCS="$CORE_INCS $OPENSSL/include"CORE_DEPS="$CORE_DEPS $OPENSSL/include/openssl/ssl.h"CORE_LIBS="$CORE_LIBS $OPENSSL/libssl.a"CORE_LIBS="$CORE_LIBS $OPENSSL/libcrypto.a"

执行make clean 之后重新执行上面的./configure ....,这时报错

ld: symbol(s) not found for architecture x86_64clang: error: linker command failed with exit code 1 (use -v to see invocation)make[1]: *** [objs/nginx] Error 1make: *** [build] Error 2

查了一下,看到好多人的解决方式都是修改objs/Makefile文件,找到编译openssl的地方,将./config --prefix= 改成./Configure darwin64-x86_64-cc --prefix=,改完之后千万不要执行./configure ....,否则会重新生成objs/Makefile文件,最终如下

/work/tools/openssl-1.0.2q/.openssl/include/openssl/ssl.h:  objs/Makefile        cd /work/tools/openssl-1.0.2q         && if [ -f Makefile ]; then $(MAKE) clean; fi         && ./Configure darwin64-x86_64-cc --prefix=/work/tools/openssl-1.0.2q/.openssl no-shared no-threads          && $(MAKE)         && $(MAKE) install_sw LIBDIR=lib

再次执行

makemake install

如果还报上面的错误,可以尝试手动执行下面的命令之后再执行上面的命令

./Configure darwin64-x86_64-cc --prefix=/work/tools/openssl-1.0.2q/.openssl no-shared no-threads sudo makesudo make install

有时候报类似symbol(s) not found 有可能是权限不够导致的,可以尝试加sudo执行命令。这时启动nginx已经可以启动了。

配置

本文以Consul作为注册中心,关于Consul的知识将不再介绍。进入配置文件目录创建一个目录servers以放将来添加的配置文件,修改配置文件nginx.conf添加include servers/*.conf; ,进入servers创建一个空文件upsync-test-tmp.conf作为upsync的缓存文件,再创建配置文件 test-upsync.conf

upstream testupsync {    upsync 127.0.0.1:8500/v1/kv/upstreams/testupsync/ upsync_timeout=6m upsync_interval=500ms  upsync_type=consul strong_dependency=off;    upsync_dump_path /usr/local/etc/nginx2/servers/upsync-test-tmp.conf;    include /usr/local/etc/nginx2/servers/upsync-test-tmp.conf;     server 127.0.0.1:11111 down ;}server {    listen       8000;    server_name  localhost;    location / {       proxy_pass http://testupsync;      }    location = /upstream_show {       upstream_show;    }}

server 127.0.0.1:11111 down ;是为了占位,防止启动nginx报错。接下来向注册中心注册服务

curl -X PUT -d '{"weight":2, "max_fails":2, "fail_timeout":10 }' http://127.0.0.1:8500/v1/kvtreams/testupsync/127.0.0.1:8002curl -s http://127.0.0.1:8500/v1/kv/upstreams/testupsync?recurse

接下来启动nginx,再请求服务发现已经起作用了。

bb0e4bbfc88039fba5b7fc6658c43e7f.png

再下掉这个服务看看是否生效

curl -X PUT -d '{"weight":2, "max_fails":2, "fail_timeout":10,"down":1}' http://127.0.0.1:8500/v1/kvtreams/testupsync/127.0.0.1:8002
d470ac67d8deb3b09d0d3397f646af35.png

再上线这个服务

curl -X PUT -d '{"weight":2, "max_fails":2, "fail_timeout":10,"down":0}' http://127.0.0.1:8500/v1/kvtreams/testupsync/127.0.0.1:8002
c33b6902459d6e3704b28f7f5ed99176.png

测试已经没有问题。

5a811c5bd3075fc38d026be46c8c894d.png

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

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

相关文章

centos7 qt之程序编译 cant start process “cmake”

之所以出现这个问题,是由于qt内置的cmake与系统已安装的cmake命令冲突。解决的方法是,在build里将cmake命令加上绝对路径。 问题得以解决。转载于:https://www.cnblogs.com/jiu0821/p/6762343.html

码农笑话图片十张

原创翻译~转载请说明出处~~~~~~~~1、如果你让码农给你做个事情,比如修个灯泡,他会这样去执行你的指令2、分享一个码农发现并解决bug的过程,实在是符合我们码农的人设3、码农的一天,像极了我的一天4、至今为止,没有遇到…

伸展树学习总结

伸展树 与AVL树类似, 伸展树也是二叉搜索树的一种形式, 伸展树无需保证时刻保持全树的平衡,也不需要像AVL树一样要求记录平衡因子的附加信息 伸展树的提出源于信息访问的局部性(刚被访问过的信息有可能再次被访问,要被访问的元素可能位于刚访问过的元素的附近), 就伸展树而言…

python的if和else、for、while语法_python-变量、if else语句 、for循环、while循环(4月26号)...

变量:五.注意:python是可执行程序 在linux写python第一行必须写#!/usr/bin/env python(声明解释器在windows中写python第一行需要写# -*- coding:utf-8 -*-Pycharm:开发调试效率高 在pycharm中new project 并且每天创建一个目录右键diectory…

c语言 库打印函数

函数#include<stdio.h>int printf(const char *format, ... );/* [until c99]写结果到stdout */int printf(const char *restrict format, ... );/* [since c99] */int fprintf(FILE *stream, const char *format, ... );/* [until c99]写结果到文件流stream */int fprin…

xhprof windows下安装和使用(转载)

1、使用5.3.3以上的php版本&#xff0c;或者直接下载wamp2.1集成环境。 2、下载xhprof for windows版本&#xff0c;地址&#xff1a;http://www.benjamin-carl.de/?downloadXHProf-0.10.0-PHP-5.3.3-VC6-x86-TS&#xff0c;把解压后的dll文件放到php的ext目录里面。 关于这个…

B树学习总结

B树 多路搜索树 当数据规模足够大的时候, 大部分数据存储到外存中, 常规的平衡二叉搜索树将无法满足需求理由如下: 常规二叉平衡搜索树每当进行search(),insert(),remove()操作的时候就会进行节点的切换,从而导致大量的IO操作,就此提出了多路搜索,尝试将原本的多个节点合在一…

嵌入式未来趋势是什么?

感谢CSDN编辑邀请 前几天通过了CSDN博客专家的申请&#xff0c;在CSDN博客摸爬滚打多少个日日夜夜后终于修成正果了&#xff0c;当时通过CSDN博客专家时赶紧把消息发给了以前的创新基地同学&#xff0c;想起来&#xff0c;我们那时候刚开始学习单片机&#xff0c;就是从CSDN上面…

python如何调用阿里云接口_Python调用aliyun API设置阿里云负载均衡虚拟服务器组权重...

环境准备系统环境CentOS Linux release 7.2.1511 (Core)[rootlocalhost ~]# cat /proc/versionLinux version 3.10.0-327.el7.x86_64 (builderkbuilder.dev.centos.org) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Thu Nov 19 22:10:57 UTC 2015[rootlocal…

js动态添加删除节点

转载于:https://www.cnblogs.com/jiaobaobao/p/6762692.html

C++与Java中的static成员总结

简述 在结构化程序设计中,内存中数据的共享是通过参数, 全局变量实现的; 在面向对象程序设计中函数与数据成员封装在一起, 数据共享通过类内部数据成员之间的相互访问, 外部对象则通过静态成员(即static成员)来共享数据; 接下来通过面向对象叙述static特性 C中的static 静…

书中自有黄金屋~外加中奖结果通知

人生的路很长&#xff0c;很艰辛&#xff0c;只有不断学习才能超越梦想&#xff0c;大牛是如何成长的&#xff01;首先要多看多听多写~~今天推荐一些大牛们都关注的技术公众号&#xff0c;机器学习、架构、前端、嵌入式、PY学习.....希望能够帮助到大家&#xff0c;引领我们前行…

python迭代算法_Python实现简单的梯度下降法

Python 实现简单的梯度下降法机器学习算法常常可以归结为求解一个最优化问题&#xff0c;而梯度下降法就是求解最优化问题的一个方法。梯度下降法(gradient descent)或最速下降法(steepest decent)&#xff0c;是求解无约束最优化问题的一种最常用的方法。梯度下降法实现简单&a…

[Linux]Linux应用程序中添加强制中断处理

注册CtrlC的按键signal信号捕捉&#xff0c;在捕捉到该动作后&#xff0c;强制退出应用程序 void handle_sig(int num) {printf( "%s\n", __func__ );exit(1); }int main( int argc, char **argv ) {signal(SIGINT, handle_sig); //....................... } 转载于…

顺序表的应用__电话本

顺序表的建立及使用 顺序表: 就所谓的数组式操作 编程实现顺序存储结构中的基本操作的实现&#xff08;电话本的建立、插入、删除、修改、逆置、查找、输出&#xff09; 整个操作过于简陋, 只对上述功能做叙述, 采用结构体数组实现, 本打算用class操作, 可因为某种原因就搁置…

拨号云服务器怎么自动配置网关_云服务器配置网站卡慢怎么办

网站访问卡慢有很多原因&#xff0c;一次完整的 HTTP 请求包括域名解析、建立 TCP 连接、发起请求、云服务器接收到请求进行处理并返回处理结果、浏览器对 HTML 代码进行解析并请求其他资源&#xff0c;以及对页面进行渲染呈现。其中&#xff0c;HTTP 的请求过程经历了用户本地…

TVS 和压敏电阻联合使用进行浪涌保护时,压敏电阻的压敏电压要低于TVS 的钳位电压 VC。

TVS(瞬态电压抑制器)二极管和MOV(金属氧化物压敏电阻)通常被用于电路中以提供浪涌保护。当两者联合使用时,设计要求MOV的压敏电压低于TVS二极管的钳位电压VC是因为: 1、分担能量: MOV设计用于吸收和分散大量能量,能够在遭受浪涌时承受较长时间的高电压。MOV在其压敏电压…

通俗理解Java中的Lambda表达式

Lambda Lambda表达式支持将代码块作为方法参数, 允许使用更为简洁的方式实现抽象类或接口的抽象方法, 而不再是通过匿名内部类的方式, 它具有对某一方法重写或实现的功能; 接下来通过一个简单的例子了解一下 public class LambaExpressionDemo {public void eat(Eatable e) {…

中断下半部机制-softirq-Tasklet-工作队列

中断上半部和下半部 在中断上半部,就是中断处理函数里面,是关中断的,所以为了快速执行,不能放太多的处理代码,只能执行非常短,这就衍生出了中断下半部。下半部主要是为了方便执行大量和本次中断相关的代码。 中断下半部的三种机制 下半部上下文顺序执行保障softirq中断…

jquery源码中noConflict(防止$和jQuery的命名冲突)的实现原理

jquery源码中noConflict(防止$和jQuery的命名冲突)的实现原理 最近在看jquery源码分析的视频教学&#xff0c;希望将视频中学到的知识用博客记录下来&#xff0c;更希望对有同样对jquery源码有困惑的童鞋能有一点点的帮助&#xff08;我是从一个小白的角度出发&#xff0c;感觉…