Nginx[004] 安装Nginx & lua模块平滑升级

it2022-06-30  93

安装 Nginx

下载&解压

# wget http://nginx.org/download/nginx-1.14.2.tar.gz # tar xf nginx-1.14.2.tar.gz -C /usr/local

添加预启动的执行环境

# yum install pcre pcre-devel openssl-devel gcc gcc-c++ perl-ExtUtils-Embed

添加编译安装选项,并检查编译环境

# ./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module --with-http_perl_module

编译安装

# make && make install

增加环境变量

# vim /etc/profile.d/nginx.sh PATH=/apps/nginx/sbin/:$PATH

配置nginx的service 脚本例子

# vim /usr/lib/systemd/system/nginx.service [Unit] Description=nginx After=network.target [Service] Type=forking ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf ExecReload=/apps/nginx/sbin/nginx -s reload ExecStop=/apps/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target

赋予脚本执行权限

chmod +x /usr/lib/systemd/system/nginx.service

设置nginx.service为系统服务

systemctl enable nginx.service

通过系统服务操作nginx

systemctl start nginx.service systemctl reload nginx.service systemctl restart nginx.service systemctl stop nginx.service systemctl status nginx.service systemctl daemon-reload

查看占用80端口的进程

# netstat -lnp|grep :80

安装Lua模块

装lua # wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz # tar -zxvf LuaJIT-2.0.5.tar.gz # cd LuaJIT-2.0.5 # make install PREFIX=/usr/local/LuaJIT /etc/profile 文件中加入环境变量 export LUAJIT_LIB=/usr/local/LuaJIT/lib export LUAJIT_INC=/usr/local/LuaJIT/include/luajit-2.0

路径是上面luajit实际安装路径,路径错误安装nginx的lua模块时会报错找不到luajit库

下载ngx_devel_kit模块 # wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz

然后解压缩 NDK(nginx development kit)模块是一个拓展nginx服务器核心功能的模块,第三方模块开发可以基于它来快速实现。 NDK提供函数和宏处理一些基本任务,减轻第三方模块开发的代码量。

下载lua-nginx-module模块 # wget https://github.com/openresty/lua-nginx-module/archive/v0.10.9rc7.tar.gz

然后解压缩 lua-nginx-module模块使nginx中能直接运行lua

安装相应的模块

找到之前已有的模块

# nginx -V

输出nginx版本

# nginx -v

下载同版本的nginx源码 并解压

# wget http://nginx.org/download/nginx-1.14.2.tar.gz # tar xf nginx-1.14.2.tar.gz && cd nginx-1.14.2

备份原Nginx文件

# mv /apps/nginx/sbin/nginx /apps/nginx/sbin/nginx.bak # cp -r /etc/nginx{,.bak}

编译安装(平滑) 增加这两个模块 –add-module=/vagrant/lua-nginx-module-0.10.9rc7 –add-module=/vagrant/ngx_devel_kit-0.3.0

./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module --with-http_perl_module --add-module=/vagrant/lua-nginx-module-0.10.9rc7 --add-module=/vagrant/ngx_devel_kit-0.3.0 # make # cd objs # cp nginx /apps/nginx/sbin/ # cd /vagrant/nginx-1.14.2 # make upgrade

此处出现报错

/apps/nginx/sbin/nginx -t /apps/nginx/sbin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or director

软连接的问题

首先, 根据报错找到文件的真实位置

# find / -name libluajit-5.1.so.2 /usr/local/LuaJIT/lib/libluajit-5.1.so.2

找到软连接的参考路径

# ldd $(which /apps/nginx/sbin/nginx) libluajit-5.1.so.2 => not found

创建软连接

# ln -s /usr/local/LuaJIT/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2

// 再次执行升级

[root@ nginx-1.14.2]# make upgrade

成功输出如下:

/apps/nginx/sbin/nginx -t nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok nginx: configuration file /apps/nginx/conf/nginx.conf test is successful kill -USR2 `cat /apps/nginx/logs/nginx.pid` sleep 1 test -f /apps/nginx/logs/nginx.pid.oldbin kill -QUIT `cat /apps/nginx/logs/nginx.pid.oldbin`

本次操作给将来留下一个坑, 因为安装模块时所使用的文件下载后解压,就直接用, 没有管理到统一路径, 这可能会给将来留下隐患, 建议统一管理安装时所使用的模块安装包


最新回复(0)