文章目录
- Nginx平滑升级&重定向rewrite
- nginx平滑升级
- 流程
- 环境
- 查看旧版的配置信息
- 下载新版nginx源码包和功能模块包
- 编译配置新版本
- 平滑升级
- 验证
- 重定向rewrite
- 配置重定向准发
- 访问测试
Nginx平滑升级&重定向rewrite
nginx平滑升级
流程
平滑升级:
(升级版本、增加新功能)
1.获取老版本的编译信息
2.老版本备份
3.编译新版本或者新功能(不能执行make install)
4.手动替换新版本并重启
5.验证新版本
环境
操作系统 | 旧版本 | 新版本 | 新加功能 |
---|---|---|---|
centos-8 | nginx-1.22.1 | nginx-1.24.0 | echo-nginx-module |
部署nginx请阅读nginx服务和LNMP架构&部署Discuz论坛系统
查看旧版的配置信息
升级的同时要保留旧版的功能,所以要查看详细的编译信息
//查看当前版本nginx的详细信息,记住旧版的编译信息
[root@wanf ~]# nginx -V
nginx version: nginx/1.22.1
built by gcc 8.5.0 20210514 (Red Hat 8.5.0-4) (GCC)
built with OpenSSL 1.1.1k FIPS 25 Mar 2021
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-debug --with-http_ssl_module --with-http_realip_module --with-http_image_filter_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_stub_status_module --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log
[root@wanf ~]#
下载新版nginx源码包和功能模块包
Nginx官网
GitHub官网
//下载新版nginx源码包
[root@wanf ~]# wget http://nginx.org/download/nginx-1.24.0.tar.gz -P /usr/src/
[root@wanf ~]# ls /usr/src/
debug nginx-1.22.1 nginx-1.24.0.tar.gz php-8.2.10.tar.gz
kernels nginx-1.22.1.tar.gz php-8.2.10
//在GitHub下载模块代码
[root@wanf ~]# yum -y install git
[root@wanf ~]# git clone https://github.com/openresty/echo-nginx-module.git
[root@wanf ~]# mv echo-nginx-module/ /usr/src/
[root@wanf ~]# ls /usr/src/
debug kernels nginx-1.22.1.tar.gz php-8.2.10
echo-nginx-module nginx-1.22.1 nginx-1.24.0.tar.gz php-8.2.10.tar.gz
[root@wanf ~]#
编译配置新版本
//备份旧版nginx主程序
[root@wanf ~]# cp /usr/local/nginx/sbin/nginx /opt/nginx-buckup-20231019
[root@wanf ~]# ls /opt/
nginx-buckup-20231019
//复制旧版的编译参数,并加上新的功能模块,进行编译
[root@wanf ~]# cd /usr/src/
[root@wanf src]# ls
debug kernels nginx-1.22.1.tar.gz php-8.2.10
echo-nginx-module nginx-1.22.1 nginx-1.24.0.tar.gz php-8.2.10.tar.gz
[root@wanf src]# tar -xf nginx-1.24.0.tar.gz
[root@wanf src]# cd nginx-1.24.0/
[root@wanf nginx-1.24.0]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-debug \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_image_filter_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log \
--add-module=../echo-nginx-module/
(配置过程省略)
//编译新版本(只执行make,不执行make install)
[root@wanf nginx-1.24.0]# make
(编译过程省略)
平滑升级
先关闭旧版nginx服务,然后把新编译的nginx主程序替换掉旧版,再启动服务即可
//新版nginx主程序文件,/opjs/nginx就是主程序
[root@wanf nginx-1.24.0]# ls
auto CHANGES.ru configure html Makefile objs src
CHANGES conf contrib LICENSE man README
[root@wanf nginx-1.24.0]# ls objs/
addon Makefile nginx.8 ngx_auto_headers.h ngx_modules.o
autoconf.err nginx ngx_auto_config.h ngx_modules.c src
[root@wanf nginx-1.24.0]#
//平滑升级。停止服务,替换文件,启动服务要一步执行完。否则可能导致升级失败。
[root@wanf nginx-1.24.0]# cd objs/
[root@wanf objs]# systemctl stop nginx;\cp nginx /usr/local/nginx/sbin/nginx;systemctl start nginx
验证
//端口号80已经启动
[root@wanf objs]# ss -anlt
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 127.0.0.1:9000 0.0.0.0:*
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 80 *:3306 *:*
LISTEN 0 128 [::]:22 [::]:*
//已经升级为新版nginx-1.24.0
[root@wanf objs]# nginx -v
nginx version: nginx/1.24.0
[root@wanf objs]#
//测试新添加的echo功能
//修改配置文件
[root@wanf ~]# vim /usr/local/nginx/conf/nginx.conf
......
location /status {
echo "hallo wanf";
stub_status on;
allow 192.168.179.0/24;
deny all;
}
......
//测试配置文件语法;语法没有报错
[root@wanf ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@wanf ~]#
升级成功
重定向rewrite
以下是拿Discuz论坛系统做案例
假设原来的域名是www.wanf2.com,但是公司换了新的域名为www.wanf1.com,那么用户使用旧域名就无法访问到论坛系统
LNMP架构部署论坛系统请阅读LNMP架构&部署Discuz论坛系统
旧域名无法访问
使用新域名可以访问
配置重定向准发
为了用户体验,需要做一个转发,让用户访问旧域名的时候,会跳转到新域名
//修改配置文件,在旧域名的虚拟主机里面添加一个转发
[root@wanf ~]# vim /usr/local/nginx/conf/nginx.conf
......
server {
listen 80;
server_name www.wanf2.com;
location / {
root html;
index index.php index.html index.htm;
rewrite ^/(.*)$ http://www.wanf1.com/$1 break; //添加此行,改为新域名
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
}
......
//重启服务
[root@wanf ~]# systemctl restart nginx.service
[root@wanf ~]# systemctl restart php-fpm.service
访问测试
访问旧域名,自动跳转访问新域名
访问新域名,直接可以访问