CentOS 7 nginx 安装 sticky模块

一、安装准备

         首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先安装这些lib库,这些依赖库主要有g++、gcc、openssl-devel、pcre-devel和zlib-devel 所以执行如下命令安装

yum install gcc-c++ 

 

 

安装下面命令的目的是确保系统上安装了这些库和开发包,以便在编译和安装一些需要使用这些库的软件时,可以顺利进行。

  sudo yum install -y pcre pcre-devel

 

    pcre 是 Perl Compatible Regular Expressions 的缩写,即 Perl 兼容的正则表达式库。

    pcre-devel 是用于开发的 pcre 库,包含头文件和静态库,可以帮助开发者编译和链接使用 pcre 的程序。

 

  sudo yum install -y gcc zlib-devel make

 

    zlib 是一个数据压缩库,广泛用于许多软件中,特别是在 web 服务器和应用中用于压缩和解压缩数据。

    zlib-devel 是 zlib 的开发包,包含了头文件和静态库,用于开发者编译和链接使用 zlib 的程序。

 

  sudo yum install -y openssl openssl-devel

 

    openssl 是一个开放源代码的加密库,实现了 SSL 和 TLS 协议,用于安全地传输数据。

    openssl-devel 是 OpenSSL 的开发包,包含了开发所需的头文件和静态库,用于开发者编译和链接使用 OpenSSL 的程序。

 

sudo yum install -y pcre pcre-devel

sudo yum install -y gcc zlib-devel make

sudo yum install -y openssl openssl-devel

 

二、安装Nginx

安装之前,最好检查一下是否已经安装有nginx

find -name nginx


如果系统已经安装了nginx,那么就先卸载  注意:如果有之前配置好的 配置文件 请进行备份

yum remove nginx


首先进入/usr/local/src目录

cd /usr/local/src


下载nginx-sticky插件(正常是无法访问,方法你应该懂,不做负载均衡可以省略此步)

https://code.google.com/archive/p/nginx-sticky-module/downloads

wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/nginx-sticky-module/nginx-sticky-module-1.1.tar.gz

也可以先下载到本地电脑上,然后上传到服务器,ip换成你服务器的地址

scp E:\test\nginx-sticky-module-1.1.tar.gz root@127.0.0.1:/usr/local/src

解压

tar -xzvf nginx-sticky-module-1.1.tar.gz


从官网下载最新版的nginx,我这里使用1.20.1版本

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


解压nginx压缩包

tar -zxvf nginx-1.20.1.tar.gz


会产生一个nginx-1.20.1 目录,这时进入nginx-1.20.1目录

cd nginx-1.20.1

接下来安装,使用--prefix参数指定nginx安装的目录(/usr/local/nginx),

编译make、安装make install

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --add-module=../nginx-sticky-module-1.1
make 
make install     

 

由于版本的问题编译时大概率会出现错误:

../nginx-sticky-module-1.1/ngx_http_sticky_module.c: In function ‘ngx_http_get_sticky_peer’:
../nginx-sticky-module-1.1/ngx_http_sticky_module.c:333:21: error: assignment makes pointer from integer without a cast [-Werror]
   iphp->rrp.current = iphp->selected_peer;

 

进入nginx-sticky-module-1.1目录


1.根据错误提示 对ngx_http_sticky_module.c文件也进行修改位置(333:21)vim 编辑器中输入333G


修改两个地方


第6行添加:


#include <nginx.h>


第333行左右(iphp->rrp.current = iphp->selected_peer;)修改为:


#if defined(nginx_version) && nginx_version >= 1009000

iphp->rrp.current = peer;

#else

iphp->rrp.current = iphp->selected_peer;

#endif


修改后参考,缩进自己调整,避免字符不匹配


/* we have a valid peer, tell the upstream module to use it */
if (peer && selected_peer >= 0) {
ngx_log_debug(NGX_LOG_DEBUG_HTTP, pc->log, 0, "[sticky/get_sticky_peer] peer found at index %i", selected_peer);
#if defined(nginx_version) && nginx_version >= 1009000
iphp->rrp.current = peer;
#else
iphp->rrp.current = iphp->selected_peer;
#endif

 

再次编译出现新的错误,错误省略了一部分 大概分两类错误

../nginx-sticky-module-1.1/ngx_http_sticky_misc.c
../nginx-sticky-module-1.1/ngx_http_sticky_misc.c: In function ‘ngx_http_sticky_misc_md5’:
../nginx-sticky-module-1.1/ngx_http_sticky_misc.c:117:14: error: ‘MD5_DIGEST_LENGTH’ undeclared (first use in this function)
u_char hash[MD5_DIGEST_LENGTH];
^
../nginx-sticky-module-1.1/ngx_http_sticky_misc.c:117:14: note: each undeclared identifier is reported only once for each function it appears in
../nginx-sticky-module-1.1/ngx_http_sticky_misc.c:117:9: error: unused variable ‘hash’ [-Werror=unused-variable]
u_char hash[MD5_DIGEST_LENGTH];

../nginx-sticky-module-1.1/ngx_http_sticky_misc.c: In function ‘ngx_http_sticky_misc_text_raw’:
../nginx-sticky-module-1.1/ngx_http_sticky_misc.c:281:2: error: passing argument 2 of ‘ngx_sock_ntop’ makes integer from pointer without a cast [-Werror]
digest->len = ngx_sock_ntop(in, digest->data, len, 1);

 

  第1种:是md5报错,增加头文件支持

#include <openssl/md5.h>

第2种.根据提示 把ngx_http_sticky_misc.c(注意文件名变了) 的281行修改如下
原

digest->len = ngx_sock_ntop(in, digest->data, len, 1);
改后

digest->len = ngx_sock_ntop(in, sizeof(struct sockaddr_in), digest->data, len, 1);

修改完成后重新编译(编译成功了)

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --add-module=../nginx-sticky-module-1.1
make 
make install     

 

 

 

 

 

 

 

posted @ 2024-07-05 16:29  取经路上  阅读(22)  评论(0编辑  收藏  举报