一、实验环境
1、主机:任意版本(本作者使用的是RHEL9.4)
2、防火墙和 selinx处于关闭状态
3、官方源码包下载地址:https://nginx.org/en/download.html
二、实验内容
1、nginx的源码编译
(1)安装库
dnf install gcc pcre-devel zlib-devel openssl-devel -y
(2)将 24 版本的 nginx 安装包拖入虚拟机,并进行解压
(3)建立 nginx 用户
useradd -s /sbin/nologin -M nginx
(4)检查系统环境、依赖库等,根据指定的参数和系统的实际情况生成相应的Makefile和其他配置文件,这些文件将用于后续的编译和安装过程(使用 ./configure --help 来查看模块)
(5) 将构建好的软件安装到指定的位置
make && make install
(6)设置环境变量
(7)查看版本信息
2、nginx的平滑升级及版本回滚
2.1 平滑升级
(1)将 26 版本的 nginx 安装包拖入虚拟机,并进行解压
(3) 编译 26 版本
注意:这里要添加echo-nginx-module-0.63的压缩包并进行解压
(4)查看两个版本
(5)把之前的旧版的nginx命令备份
(6)把新版本的nginx命令复制过去
(7)开启 nginx
(8)平滑升级可执行程序
(9)回收旧版本
(10) 检查版本信息
2.2 回滚
(1)把新版本的nginx命令备份
(2)旧版本覆盖新版本
(3)重启加载旧进程
(4)回收新版本
(5)检查版本信息
3、nginx命令参数
(1)-v:显示版本
(2)-V:显示版本和编译参数
(3)-t:测试配置文件是否出错
(4)-T:测试并打印
(5)-q:静默模式 (这个操作后看不出来变化,作者这里是在已经启动的状态下给大家测试,主打一个我敲你看)
(6)-s reload:重启 nginx
观察进程号变化,发现已经重启。
(7)-g:设置全局命令,注意和配置文件不要同时配置,否则冲突
配置文件内容:
此时配置文件设置1个nginx,当我们设置6时,就会出现下面报错内容:
4、nginx启动文件编写
(1)启动文件脚本编写
(2)重新加载 Systemd 配置,使新的或修改过的服务生效
#重新加载配置文件
systemctl daemon-reload
#启动nginx
systemctl start nginx
5、nginx全局参数优化
(1)下载测试工具
dnf install httpd-tools -y
(2)查看
此时发现运行最大次数处于1024次:
当我们测试连接数量为10000,变化链接数为5000时,系统会给我们反馈说运行次数太多的错误:
(3)修改配置文件
vim /etc/security/limits.conf
vim /usr/local/nginx/conf/nginx.conf
(4)再次查看
发现运行次数变为100000:
再次运行:
此时运行成功!!!此实验结束!!
额外小知识:
双核心且进程绑定状态(可以写成 01 和 10)
6、location用法
在做这个实验之前,我们来做一个配置环境的小实验,即 nginx 配置中的 root 和 alias
首先,在配置文件中写入使用 epoll 模型(不写入的话我们使用的是 poll 模型,那我们为什么使用 epoll 模型呢?其实是因为它相较于更稳定,作为一个高级的工程师来说,我们当然使用更稳定 的模型)和定义子配置文件路径:
vim /usr/local/nginx/conf/nginx.conf
接着,创建虚拟主机网页目录:
#创建网站目录
mkdir -p /data/web/html
#写入网页内容
echo www.moon.com > /data/web/html/index.html
再接着,创建虚拟主机网站配置:
vim /usr/local/nginx/conf.d/vhost.conf
进行校验并重启:
本地写入解析:
路径:C:\Windows\System32\drivers\etc下的hosts文件
最后,进行测试:
当网页出来我们想要的内容时,这个实验就结束啦!!!我们这个实验也是为接下来的实验进行提前的环境配置。
那么我们接下来进行我们的 location 用法的实验:
前提:
参数 | 参数说明 |
---|---|
= | 只能精确指定文件,需要请求字串与uri精确匹配,大小敏感 |
^~ | 用于标准uri前,表示包含正则表达式,并且匹配以指定的正则表达式开头 对uri的最左边部分做匹配检查,不区分字符大小写 |
~ | 用于标准uri前,表示包含正则表达式,并且区分大小写 |
~* | 用于标准uri前,表示包含正则表达式,并且不区分大写 |
\ | 用于标准uri前,表示包含正则表达式并且转义字符。可以将 . * ?等转义为普通符号 |
不带符号 | 匹配起始于此uri的所有的uri |
匹配优先级从高到低:(=, ^~, ~,~*, 不带符号 )
(1)添加网页目录
(2)修改子配置文件
vim /usr/local/nginx/conf.d/vhost.conf
重启:
nginx -s reload
(3)查看(注意:每注释一个都要重启)
~和~*比较:
对目录和文件发现谁在前面显示谁,即优先级相同(~ = ~*)
~在前面时:
~*在前面时:
对目录:[web4(~)= web5(~*)] > web1(不带符号)> web3(^~)
=不能指定目录
第一个:
第二个:
第三个:
第四个:
第五个:
对文件:web2(=)> [web4(~)= web5(~*)] > web1(不带符号)> web3(^~)
第一个:
第二个:
第三个:
第四个:
第五个:
7、nginx的用户认证
(1)创建两个用户
(2)创建网页目录
(3)编辑配置文件
vim /usr/local/nginx/conf.d/vhost.conf
(4)重启并测试
输入账号密码跳转:
8、自定义错误页面
注意:这个是40X的报错页面
(1)创建网页目录
(2)编辑配置文件
vim /usr/local/nginx/conf.d/vhost.conf
(3)重启后查看
9、自定义日志
(1)创建日志目录
(2)编辑配置文件
vim /usr/local/nginx/conf.d/vhost.conf
(3)重启后查看
10、nginx文件检测
注意:这个是500的报错页面
实验前记得添加虚拟机的本地解析
(1)创建文件检测错误页面
(2)编辑配置文件
vim /usr/local/nginx/conf.d/vhost.conf
(3)重启后测试
11、nginx长链接控制
(1)下载测试工具
dnf install telnet -y
(2) 修改配置文件
vim /usr/local/nginx/conf/nginx.conf
(3)查看报文
这两行在接下来测试时需要自己打入,因为我们测试是浏览器,所以这些报文只能自己手打
(4)重启后测试
注意:上一个实验测试时我们把网页删除了,这里我们一定要添加上,否则会出现文件检测的失败页面
接下来开始我们的测试:
12、nginx下载服务器
(1)创建目录并在目录下制作一个文件
(2)编辑子配置文件
vim /usr/local/nginx/conf.d/vhost.conf
autoindex on:自动文件索引功能,默为off
autoindex_localtime:显示本机时间而非GMT(格林威治)时间,默认off
autoindex_exact_size off:计算文件确切大小(单位bytes),off 显示大概大小(单位K、 M),默认on
limit_rate 1024k:限制响应客户端传输速率(除GET和HEAD以外的所有方法)
(3)重启并测试
网页测试:
下载测试:
13、nginx的状态页面
(1)编辑配置文件
vim /usr/local/nginx/conf.d/vhost.conf
(2)重启后查看页面
此时出现了状态页用于输出nginx的基本状态信息:
解释基本状态信息:
- Active connections:当前处于活动状态的客户端连接数包括连接等待空闲连接数=reading+writing+waiting
- accepts:统计总值,Nginx自启动后已经接受的客户端请求连接的总数
- handled:统计总值,Nginx自启动后已经处理完成的客户端请求连接总数,通常等于accepts,除非有因worker_connections限制等被拒绝的连接
- requests:统计总值,Nginx自启动后客户端发来的总的请求数
- Reading:当前状态,正在读取客户端请求报文首部的连接的连接数,数值越大,说明排队现象严重,性能不足
- Writing:当前状态,正在向客户端发送响应报文过程中的连接数,数值越大,说明访问量很大
- Waiting:当前状态,正在等待客户端发出请求的空闲连接数,开启 keep-alive的情况下,这个值等于active –(reading+writing)
(3)将页面设置访问权限
此页面可以说是非常重要的页面,工程师们要注意不能被用户随意访问,我们可以设置之前实验做到的加密认证用户访问,但作者这里选择172.25.254.1这个IP下才可以访问
vim /usr/local/nginx/conf.d/vhost.conf
(4)重启后测试
此时访问被拒绝:
14、nginx的压缩功能
(1)设置压缩功能
vim /usr/local/nginx/conf/nginx.conf
(2)制作两个文件,一个小于1K,一个大于1K
作者这里是 small.html 为小于1K,/usr/local/nginx/logs/access.log 为大于1K
(3)测试
当压缩小于1K的文件时,发现并没有被压缩:
当压缩大于1K的文件时,发现有被压缩:
至此,我们的实验就成功啦!!!