Nginx平滑升级和location案例

本文详细介绍了Nginx的平滑升级步骤,包括获取编译参数、下载新模块、重新编译、备份与覆盖原程序。同时,讲解了location的配置案例,用于根据客户端请求URI进行匹配处理,实现访问控制等功能。通过设置不同修饰符,调整匹配优先级,确保高效路由。
摘要由CSDN通过智能技术生成

平滑升级

平滑升级的步骤
1、获取之前的编译参数
2、下载新模块
3、重新编译软件,加上–add-module=新模块的解压路径
4、停止服务并备份原程序
5、把源程序用新程序覆盖
6、启动新程序

部署nginx

创建nginx服务用户

[root@nginx ~]# useradd -r -M -s /sbin/nologin nginx
[root@nginx ~]# id nginx 
uid=975(nginx) gid=974(nginx) 组=974(nginx)

安装依赖环境

[root@nginx ~]# dnf -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ make
[root@nginx ~]# dnf -y groups mark install 'Development Tools'
上次元数据过期检查:0:13:17 前,执行于 2022年10月09日 星期日 23时39分57秒。
依赖关系解决。
=============================================================================================================
 软件包                   架构                    版本                        仓库                      大小
=============================================================================================================
安装组:
 Development Tools                                                                                          

事务概要
=============================================================================================================

完毕!

创建日志存放目录

[root@nginx ~]# cd /var/log/
[root@nginx log]# mkdir nginx
[root@nginx log]# chown -R nginx.nginx /var/log/nginx/
[root@nginx log]# ll /var/log/ | grep nginx
drwxr-xr-x  2 nginx  nginx        6 10月  9 23:54 nginx

安装nginx

[root@nginx ~]# cd /usr/local/
[root@nginx local]# wget http://nginx.org/download/nginx-1.22.0.tar.gz
--2022-10-09 23:59:20--  http://nginx.org/download/nginx-1.22.0.tar.gz
正在解析主机 nginx.org (nginx.org)... 3.125.197.172, 52.58.199.22, 2a05:d014:edb:5702::6, ...
正在连接 nginx.org (nginx.org)|3.125.197.172|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1073322 (1.0M) [application/octet-stream]
正在保存至: “nginx-1.22.0.tar.gz”

nginx-1.22.0.tar.gz         100%[========================================>]   1.02M   401KB/s  用时 2.6s    

2022-10-09 23:59:24 (401 KB/s) - 已保存 “nginx-1.22.0.tar.gz” [1073322/1073322])
[root@nginx local]# tar xf nginx-1.22.0.tar.gz -C /usr/local/src/
[root@nginx local]# cd /usr/local/src/
[root@nginx src]# ls
nginx-1.22.0
[root@nginx src]# cd nginx-1.22.0/
[root@nginx nginx-1.22.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
[root@nginx nginx-1.22.0]# make -j $(grep 'processor' /proc/cpuinfo | wc -l) && make install

配置环境变量

[root@nginx ~]# echo 'export PATH=/usr/local/nginx/sbin:$PATH' > /etc/profile
[root@nginx ~]# . /etc/profile

服务控制方式,使用nginx命令
    -t  //检查配置文件语法
    -v  //输出nginx的版本
    -c  //指定配置文件的路径
    -s  //发送服务控制信号,可选值有{stop|quit|reopen|reload

启动服务

[root@nginx ~]# nginx 
[root@nginx ~]# ss -antlp
State         Recv-Q        Send-Q               Local Address:Port                 Peer Address:Port        Process                                                                                                      
LISTEN        0             128                        0.0.0.0:111                       0.0.0.0:*            users:(("rpcbind",pid=904,fd=4),("systemd",pid=1,fd=35))                                                    
LISTEN        0             128                        0.0.0.0:80                        0.0.0.0:*            users:(("nginx",pid=25434,fd=9),("nginx",pid=25433,fd=9))                                                   
LISTEN        0             32                   192.168.122.1:53                        0.0.0.0:*            users:(("dnsmasq",pid=1790,fd=6))                                                                           
LISTEN        0             128                        0.0.0.0:22                        0.0.0.0:*            users:(("sshd",pid=983,fd=4))                                                                               
LISTEN        0             5                        127.0.0.1:631                       0.0.0.0:*            users:(("cupsd",pid=1132,fd=10))                                                                            
LISTEN        0             128                           [::]:111                          [::]:*            users:(("rpcbind",pid=904,fd=6),("systemd",pid=1,fd=37))                                                    
LISTEN        0             128                           [::]:22                           [::]:*            users:(("sshd",pid=983,fd=6))                                                                               
LISTEN        0             5                            [::1]:631                          [::]:*            users:(("cupsd",pid=1132,fd=9))                                                                             

获取之前安装nginx的编译参数

[root@nginx ~]# nginx -V
nginx version: nginx/1.22.0
built by gcc 8.5.0 20210514 (Red Hat 8.5.0-15) (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

下载新模块
https://github.com/openresty/echo-nginx-module
下载到本地,然后上传到nginx服务器中

[root@nginx ~]# ls 
 anaconda-ks.cfg	        initial-setup-ks.cfg	      echo-nginx-module-master.zip 

重新编译软件
安装unzip工具

[root@nginx ~]# yum -y install unzip
解压新的模块包
[root@nginx ~]# unzip echo-nginx-module-master.zip
再次解压nginx源码包
tar -zxf nginx-1.22.0.tar.gz
[root@nginx ~]# ls
视频  anaconda-ks.cfg  echo-nginx-module-master  echo-nginx-module-master.zip  initial-setup-ks.cfg  nginx-1.22.0  nginx-1.22.0.tar.gz

添加新的模块进行编译安装

[root@nginx nginx-1.22.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-master

查看objs目录下没有nginx程序

[root@nginx nginx-1.22.0]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  Makefile  man  objs  README  src
[root@nginx nginx-1.22.0]# ls objs/
addon  autoconf.err  Makefile  ngx_auto_config.h  ngx_auto_headers.h  ngx_modules.c  src

使用make编译

[root@nginx nginx-1.20.0]# mak

编译完成之后再次进行查看objs目录下是否有nginx程序

[root@nginx nginx-1.22.0]# cd objs/
[root@nginx objs]# ls
addon  autoconf.err  Makefile  nginx  nginx.8  ngx_auto_config.h  ngx_auto_headers.h  ngx_modules.c  ngx_modules.o  src

备份源程序并停止、覆盖、启动服务
先查看升级前和升级后的版本区别,主要看编译参数
升级前

[root@nginx nginx-1.22.0]# nginx -V
nginx version: nginx/1.22.0
built by gcc 8.5.0 20210514 (Red Hat 8.5.0-15) (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@nginx nginx-1.22.0]# objs/nginx -V
nginx version: nginx/1.22.0
built by gcc 8.5.0 20210514 (Red Hat 8.5.0-15) (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 --add-module=../echo-nginx-module-master
[root@nginx nginx-1.22.0]# 

停止、备份、覆盖、启动程序

停止服务
[root@nginx nginx-1.22.0]# nginx -s stop
备份
[root@nginx nginx-1.22.0]# cp /usr/local/nginx/sbin/nginx /opt/
覆盖
[root@nginx nginx-1.22.0]# cp objs/nginx /usr/local/nginx/sbin/ 
cp:是否覆盖'/usr/local/nginx/sbin/nginx'? y
启动服务
[root@nginx nginx-1.22.0]# /usr/local/nginx/sbin/nginx
查看端口
[root@nginx nginx-1.22.0]# ss -antl
State                 Recv-Q                Send-Q                                Local Address:Port                                 Peer Address:Port                Process                
LISTEN                0                     128                                         0.0.0.0:111                                       0.0.0.0:*                                          
LISTEN                0                     128                                         0.0.0.0:80                                        0.0.0.0:*        

查看nginx信息

[root@nginx nginx-1.22.0]# nginx -V
nginx version: nginx/1.22.0
built by gcc 8.5.0 20210514 (Red Hat 8.5.0-15) (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 --add-module=../echo-nginx-module-master

测试–引用echo模块

[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
//修改location参数内容就行
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
                echo "niuma";
        }

使用nginx -t 检查配置文件内容

[root@nginx nginx-1.22.0]# 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

重载nginx

[root@nginx nginx-1.22.0]# nginx -s reload

使用浏览器访问,发现浏览器无法支持echo模块,会当成文件进行下载
使用命令进行访问 win+r
cmd
在这里插入图片描述

location案例

location区段,通过指定模式来与客户端请求的URI相匹配
功能:
允许根据用户请求的URI来匹配定义的各个location,匹配时,此请求将被相应的location配置块中的配置所处理,例如做访问控制等功能
语法:
location [修饰符] pattern {…}

修饰符说明
=精确匹配
~正则表达式模式匹配,区分大小写
~*正则表达式模式匹配,不区分大小写
^~前缀匹配,类似于无修饰符的行为,也是以指定模块开始,不同的是,如果模式匹配,那么就停止搜索其他模式了,不支持正则表达式
@定义命名location区段,这些区段客户端不能访问,只可以由内部产生的请求来访问,如try_files或者error_page等

比较带有“=”的和没有修饰符的精确匹配优先级

        location / {
               echo "niuma1";

        }
           location =  / {
               echo "niuma2";

        }
[root@nginx conf]# nginx -s reload     

在这里插入图片描述
比较带有“~”的和“=”优先级

        location  ~ / {
               echo "niuma3";

        }
           location =  / {
               echo "niuma2";

        }
[root@nginx conf]# nginx -s reload     

在这里插入图片描述
比较带有“~”的和没有修饰符的精确匹配优先级

        location / {
               echo "niuma1";

        }
           location ~ / {
               echo "niuma3";
        }
[root@nginx conf]# nginx -s reload    

在这里插入图片描述
比较带有“~”的和带有“^~”修饰符的匹配优先级

          location ~ / {
               echo "niuma3";
        }
         location  ^~ / {
               echo "niuma4";
        }
[root@nginx conf]# nginx -s reload    

在这里插入图片描述
比较带有“~”的和带有“~*”修饰符的匹配优先级

     location ~ / {
               echo "niuma3";

        }
        location  ~* / {
               echo "niuma5";
        }
[root@nginx conf]# nginx -s reload 

在这里插入图片描述
比较没有修饰符的精确匹配和带有“~*”`修饰符的匹配优先级

     location  / {
               echo "niuma1";

        }
        location  ~* / {
               echo "niuma5";
        }
[root@nginx conf]# nginx -s reload 

在这里插入图片描述
查找顺序和优先级:由高到低
1、带有“=”的精确匹配优先
2、正则表达式按照他们在配置文件中定义的顺序
3、带有“^~”修饰符的,开头匹配
4、带有~或者~*修饰符的,如果正则表达式与URI匹配
5、没有修饰符的精确匹配

修饰符优先级 高--->低
location = 路径
location ^~ 路径
location ~ 正则
location ~* 正则
location 路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值