作者:天河体育场里的执波仔_287 | 来源:互联网 | 2023-09-23 20:20
Nginx 在Linux环境下安装和增加新模块
在Linux环境下安装Nginx,以及安装完成以后增加新模块。两种模块编译方式——静态编译和动态编译。
1、测试环境
CentOS 7;
Nginx-1.22.1
依赖环境安装
yum install -y gcc-c++ \
pcre pcre-devel \
zlib zlib-devel \
openssl openssl-devel
2、Nginx安装
2.1 下载和安装
下载链接 nginx: download
新建一个Nginx安装目录,解压安装文件
mkdir -p /soft/ngxinstall
cp /mnt/data/nginx-1.22.1.tar.gz /soft/ngxinstall/
tar -xzvf /soft/ngxinstall/nginx-1.22.1.tar.gz
切换路径到nginx安装目录,使用默认配置安装
cd /soft/ngxinstall/nginx-1.22.1
./configure
make
make install
查看安装路径
whereis nginx
/usr/local/nginx/sbin/nginx -V
2.2 增加模块
以vts模块为例,进行演示
下载vts模块
下载链接 GitHub - vozlt/nginx-module-vts: Nginx virtual host traffic status module
解压缩
cp /mnt/data/nginx-module-vts-master.zip /soft/
cd /soft
unzip /soft/nginx-module-vts-master.zip
查看Nginx安装参数
/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.22.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
configure arguments:--with-stream
进入Nginx文件目录,注意不要make install
cd /soft/ngxinstall/nginx-1.22.1
./configure --with-stream --add-module=/soft/nginx-module-vts-master
make
备份旧的Nginx
cp -r /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx-`date "+%Y%m%d-%H%M%S"`.bak
复制前停止nginx
/usr/local/nginx/sbin/nginx -s stop
复制编译好的Nginx
cp -r objs/nginx /usr/local/nginx/sbin/nginx
2.3 编译增加动态模块
进入Nginx文件目录
1、–add-dynamic-module=path
2、make modules
cd /soft/ngxinstall/nginx-1.22.1
./configure --with-stream \
--add-dynamic-module=/soft/nginx-module-vts-master \
--add-dynamic-module=/soft/nginx-module-sts-master \
--add-dynamic-module=/soft/nginx-module-stream-sts-master \
--with-compat
make modules
将动态模块复制到安装目录
cp objs/*.so /usr/local/nginx/modules/
在nginx.conf 中加载动态模块
load_module modules/ngx_http_stream_server_traffic_status_module.so;
load_module modules/ngx_http_vhost_traffic_status_module.so;
load_module modules/ngx_stream_server_traffic_status_module.so;
检查nginx配置是否正确
/usr/local/nginx/sbin/nginx -t
报错:
nginx: [emerg] module “.so” is not binary compatible in /usr/local/nginx/conf/nginx.conf
nginx: [emerg] dlopen() “.so” failed (.so: undefined symbol: ngx_ ) in /usr/local/nginx/conf/nginx.conf
如果动态模块加载不成功,可以使用nginx -v命令,检查Nginx的编译参数和编译模块时使用的编译参数是否一致