Nginx平滑升级&重定向rewrite

文章目录

  • 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论坛系统

旧域名无法访问

Nginx平滑升级&重定向rewrite_第1张图片Nginx平滑升级&重定向rewrite_第2张图片

使用新域名可以访问


配置重定向准发

为了用户体验,需要做一个转发,让用户访问旧域名的时候,会跳转到新域名

//修改配置文件,在旧域名的虚拟主机里面添加一个转发
[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 

访问测试

访问旧域名,自动跳转访问新域名

Nginx平滑升级&重定向rewrite_第3张图片

Nginx平滑升级&重定向rewrite_第4张图片


访问新域名,直接可以访问

Nginx平滑升级&重定向rewrite_第5张图片


你可能感兴趣的:(nginx,运维,linux)