平滑升级
平滑升级的步骤
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 路径