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

简介: 以Consul作为注册中心,用nginx-upsync-module模块实现动态负载。

【转载请注明出处】:https://developer.aliyun.com/article/759950

安装依赖包

OpenSSL

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

PCRE

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

zlib

zlib 直接选择官网首页最新的。

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

这里下载的是nginx稳定版nginx-1.14.2.tar.gznginx-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.11
make
make 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 i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[4]: *** [link_app.] Error 1
make[3]: *** [openssl] Error 2
make[2]: *** [build_apps] Error 1
make[1]: *** [/user/local/openssl-1.0.2q/.openssl/include/openssl/ssl.h] Error 2
make: *** [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.alibcrypto.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_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [objs/nginx] Error 1
make: *** [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

再次执行

make
make install

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

./Configure darwin64-x86_64-cc --prefix=/work/tools/openssl-1.0.2q/.openssl no-shared no-threads 
sudo make
sudo 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:8002

curl -s http://127.0.0.1:8500/v1/kv/upstreams/testupsync?recurse

接下来启动nginx,再请求服务发现已经起作用了。
image.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

image.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

image.png
测试已经没有问题。

【转载请注明出处】:https://developer.aliyun.com/article/759950

相关文章
|
2月前
|
负载均衡 应用服务中间件 数据库
Nginx负载过高,加机器就能解决吗?
一个架构难题的剖析:A机器顶不住,加B机器就能解决吗?
45 7
|
2月前
|
应用服务中间件 网络安全 nginx
轻松上手Nginx Proxy Manager:安装、配置与实战
Nginx Proxy Manager (NPM) 是一款基于 Nginx 的反向代理管理工具,提供直观的 Web 界面,方便用户配置和管理反向代理、SSL 证书等。本文档介绍了 NPM 的安装步骤,包括 Docker 和 Docker Compose 的安装、Docker Compose 文件的创建与配置、启动服务、访问 Web 管理界面、基本使用方法以及如何申请和配置 SSL 证书,帮助用户快速上手 NPM。
421 1
|
3月前
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
199 4
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
3月前
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
3月前
|
tengine 应用服务中间件 Linux
Tengine、Nginx安装PHP命令教程
要在阿里云Linux上安装PHP,请先更新YUM源并启用PHP 8.0仓库,然后安装PHP及相关扩展。通过`php -v`命令验证安装成功后,需修改Nginx配置文件以支持PHP,并重启服务。最后,创建`phpinfo.php`文件测试安装是否成功。对于CentOS系统,还需安装EPEL源和Remi仓库,其余步骤类似。完成上述操作后,可通过浏览器访问`http://IP地址/phpinfo.php`测试安装结果。
|
3月前
|
应用服务中间件 Linux nginx
Mac os 安装 nginx 教程(success)
这篇文章是关于如何在Mac OS系统上使用Homebrew安装nginx及其依赖,并解决安装过程中可能出现的权限问题。
285 0
Mac os 安装 nginx 教程(success)
|
3月前
|
Ubuntu 搜索推荐 应用服务中间件
Nginx安装与使用
Nginx安装与使用
|
3月前
|
负载均衡 算法 应用服务中间件
Nginx安装及配置详解
Nginx安装及配置详解
|
3月前
|
应用服务中间件 程序员 开发工具
mac下安装nginx
mac下安装nginx
|
3月前
|
应用服务中间件 Linux nginx
CentOS7安装Nginx
CentOS7安装Nginx