当前位置: 首页 > article >正文

架构师之路-学渣到学霸历程-43

NGXIN综合理解Location的作用

今天早上我们一块分享了nginx的location的意义,大概也都了解了;
今晚我们整理一个综合的实验来验证这个location的具体作用;

1、部署综合实验;

结合所有的修饰符进行测试;

这里在开始之前,添加一个echo模块;

实验之前最好就是恢复成最初的快照或者是你的环境比较干净点,比较容易排错

实验规划:

  • 服务器端:192.168.75.73
  • 客户端:192.168.75.72

服务器端添加一个echo模块:

#服务器端添加一个echo模块
	#这里就是做一个别名,方便后续敲命令而已
[root@Linux3 ~]# alias 'nginx=/usr/local/nginx/sbin/nginx'
[root@Linux3 ~]# source ./.bashrc 
	#查看一下这个原来编译的参数
[root@Linux3 ~]# nginx -V
nginx version: nginx/1.26.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments: --prefix=/usr/local/nginx
	#准备好源码包:
[root@Linux3 ~]# ls echo-nginx-module-0.61.tar.gz 
echo-nginx-module-0.61.tar.gz
	#直接解压并且改名
[root@Linux3 ~]# tar  -xzvf echo-nginx-module-0.61.tar.gz 
[root@Linux3 ~]# mv echo-nginx-module-0.61 echo-nginx-module
	#进入到源码目录,进行编译
		#这里就使用到一个了添加的模块:--add-moduler的选项
[root@Linux3 nginx-1.26.2]# ./configure --prefix=/usr/local/nginx/ --add-module=/root/echo-nginx-module
	#编译安装
[root@Linux3 nginx-1.26.2]# make && make install 
	#然后直接升级
[root@Linux3 nginx-1.26.2]# make upgrade
	#检查一下是否安装上
[root@Linux3 nginx-1.26.2]# nginx -V
nginx version: nginx/1.26.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments: --prefix=/usr/local/nginx/ --add-module=/root/echo-nginx-module

测试echo模块是否成功

  • 这里要注意,如果使用浏览器来查看的话,会无法显示出来
  • 直接使用服务器192.168.75.72来进行验证
#修改配置文件
[root@Linux3 ~]# cd /usr/local/nginx/
[root@Linux3 nginx]# vim  conf/nginx.conf
..........
	#找到/的location,然后注释掉后面,然后添加一个ehco的输出
        location / {
             echo "这是默认的 $request_uri";
         #   root   html;
         #   index  index.html index.htm;
        }
......
#重载配置文件
[root@Linux3 nginx]# nginx -s reload

#使用客户端进行验证-->到这里echo模块部署成功
[root@Linux2 ~]# curl 192.168.75.73
这是默认的 /
2 配置完整的location实验:
  • 我们部署echo模块都是为了这个实验的方便性
  • 添加几个location;用于验证修饰服
  • 服务器配置location
#修改服务器端的配置文件
[root@Linux3 nginx]# vim conf/nginx.conf
..........
.............#这个是整一个测试的配置
        location ~* \.(png|jpg)  {
                echo "这个是~* \.(png|jpg)的图片资源";
                echo "这个是忽略大小写的资源验证";
                }
        location ~ \.(png|jpg)  {
                echo "这个是~   大小写敏感的图片资源";
                echo "这个是大小写特别敏感的资源的资源验证";
                }
        location ^~ /haha/  {
                echo "这个是只要匹配上就停止的^~ /haha/";
                echo "这个是只要匹配上就停止其他规则的验证^~";
                }
        location = /haha/liangjiawei.png  {
                echo "这个是=  只要是对等的/haha/liangjiawe.png ";
                echo "这个是只要绝对相等就会优先级最高";
                }

#修改后检查配置文件并重启
[root@Linux3 nginx]# nginx -t
[root@Linux3 nginx]# nginx -s reload
3、验证修饰符优先级

这个实验要有点耐心;一个一个测试一个一个拿掉

第一步:先请求一个绝对的资源

  • 客户端直接访问
	#这里可以发现,如果资源一致,直接匹配=号的规则
[root@Linux2 ~]# curl 192.168.75.73/haha/liangjiawei.png
这个是=  只要是对等的/haha/liangjiawe.png 
这个是只要绝对相等就会优先级最高

第二步:去掉=的location规则,再访问看看

  • 服务器注释掉location 的=号的配置
#服务器注释规则
[root@Linux3 nginx]# vim conf/nginx.conf
..........
.............#这个是整一个测试的配置
        location ~* \.(png|jpg)  {
                echo "这个是~* \.(png|jpg)的图片资源";
                echo "这个是忽略大小写的资源验证";
                }
        location ~ \.(png|jpg)  {
                echo "这个是~   大小写敏感的图片资源";
                echo "这个是大小写特别敏感的资源的资源验证";
                }
        location ^~ /haha/  {
                echo "这个是只要匹配上就停止的^~ /haha/";
                echo "这个是只要匹配上就停止其他规则的验证^~";
                }
#        location = /haha/liangjiawei.png  {
#                echo "这个是=  只要是对等的/haha/liangjiawe.png ";
#                echo "这个是只要绝对相等就会优先级最高";
#                }

#记得重载配置文件
[root@Linux3 nginx]# nginx -s reload
  • 然后客户端再访问同样的地址
#这里可以发现:如果=号规则没有了,那么nginx直接有^~匹配开头是的规则来取代
[root@Linux2 ~]# curl 192.168.75.73/haha/liangjiawei.png
这个是只要匹配上就停止的^~ /haha/
这个是只要匹配上就停止其他规则的验证^~

第三步:再把这个^~这个的location规则注释,访问查看

  • 服务器注释掉location 的=号的配置
#服务器注释规则
[root@Linux3 nginx]# vim conf/nginx.conf
..........
.............#这个是整一个测试的配置
                }
        location ~* \.(png|jpg)  {
                echo "这个是~* \.(png|jpg)的图片资源";
                echo "这个是忽略大小写的资源验证";
                }
        location ~ \.(png|jpg)  {
                echo "这个是~   大小写敏感的图片资源";
                echo "这个是大小写特别敏感的资源的资源验证";
                }
#        location ^~ /haha/  {
#                echo "这个是只要匹配上就停止的^~ /haha/";
#                echo "这个是只要匹配上就停止其他规则的验证^~";
#                }
#        location = /haha/liangjiawei.png  {
#                echo "这个是=  只要是对等的/haha/liangjiawe.png ";
#                echo "这个是只要绝对相等就会优先级最高";
#                }

#记得重载配置文件
[root@Linux3 nginx]# nginx -s reload
  • 然后客户端再访问同样的地址
#这里我们也可以发现,匹配的规则是忽略大小写的匹配规则出现在我们眼前
	#问题:我们命名指定png,为什么不是~规则出现?
[root@Linux2 ~]# curl 192.168.75.73/haha/liangjiawei.png
这个是~* \.(png|jpg)的图片资源
这个是忽略大小写的资源验证

第四步:验证位置;

  • 检查一下locaton的规则
  • 总结就是同时正则的规则,可以按照配置文件中的先后进行匹配(从上往下的顺序)
#配置文件调位置-->两个location的位置对调

.........
        location ~ \.(png|jpg)  {
                echo "这个是~   大小写敏感的图片资源";
                echo "这个是大小写特别敏感的资源的资源验证";
                }
        location ~* \.(png|jpg)  {
                echo "这个是~* \.(png|jpg)的图片资源";
                echo "这个是忽略大小写的资源验证";
                }
#       location ^~ /haha/  {
#               echo "这个是只要匹配上就停止的^~ /haha/";
#               echo "这个是只要匹配上就停止其他规则的验证^~";
#               }
#       location = /haha/liangjiawei.png  {
#               echo "这个是=  只要是对等的/haha/liangjiawe.png ";
#               echo "这个是只要绝对相等就会优先级最高";
#               }
#记得重载配置文件
[root@Linux3 nginx]# nginx -s reload

#验证是~这个规则出来
[root@Linux2 ~]# curl 192.168.75.73/haha/liangjiawei.png
这个是~   大小写敏感的图片资源
这个是大小写特别敏感的资源的资源验证

最后:把所有的规则都去掉

#服务器修改配置文件
[root@Linux3 nginx]# vim conf/nginx.conf

......
        location / {
             echo "这是默认的 $request_uri";
         #   root   html;
         #   index  index.html index.htm;
        }
#       location ~ \.(png|jpg)  {
#               echo "这个是~   大小写敏感的图片资源";
#               echo "这个是大小写特别敏感的资源的资源验证";
#               }
#       location ~* \.(png|jpg)  {
#               echo "这个是~* \.(png|jpg)的图片资源";
#               echo "这个是忽略大小写的资源验证";
#               }
#       location ^~ /haha/  {
#               echo "这个是只要匹配上就停止的^~ /haha/";
#               echo "这个是只要匹配上就停止其他规则的验证^~";
#               }
#       location = /haha/liangjiawei.png  {
#               echo "这个是=  只要是对等的/haha/liangjiawe.png ";
#               echo "这个是只要绝对相等就会优先级最高";
#               }

#记得重载配置文件
[root@Linux3 nginx]# nginx -s reload

#验证:最后是默认的出俩了
[root@Linux2 ~]# curl 192.168.75.73/haha/liangjiawei.png
这是默认的 /haha/liangjiawei.png

分享环节:

hi,亲爱的朋友们:

  • 感谢你们耐心完这个笔记,如果笔记中出现的一些软件包、资源找不到的可以直接留言&私聊,我看见了就回复;
  • 资源免费共享;有需要滴滴,(仅仅是我有的)

我的坚持初衷:💕立志要成为一名架构师

  • 不断地去坚持学,其中的各种各样的难度,不言而喻~!
  • 坚持不是一件容易的事情,但它却是成功的关键。做起来吧~!

如果你也想要坚持:那么组团吧,咋们一块互相监督;一天一点分享也是进步;最怕就是孤军奋战!加油吧,追梦人~!


http://www.kler.cn/a/380757.html

相关文章:

  • SSD目标检测算法
  • 高级的SQL查询技巧有哪些?
  • SpringBoot核心:自动配置
  • 如何在K8S集群中查看和操作Pod内的文件?
  • windows安装Elasticsearch及增删改查操作
  • 分布式协同 - 分布式事务_TCC解决方案
  • 只允许指定ip远程连接ssh
  • 【3】流程控制
  • HarmonyOS鸿蒙开发入门,常用ArkUI组件学习(一)
  • Spring cloud
  • QT下载安装
  • 为什么要使用Docker?
  • c# 值类型
  • 青少年编程与数学 02-003 Go语言网络编程 02课题、网络分层模型
  • RHCE selinux 和 防火墙(fireword|iptable)
  • 【里程计在激光雷达SLAM中的作用】【gmapping算法hector_mapping算法】
  • 基于 LR(1) 和 LALR 的 Parser Generator
  • (九)JavaWeb后端开发——Servlet
  • 关于read/write 网络IO、硬盘IO的区别
  • PHP的线程安全与非线程安全版本的区别
  • 检索增强生成(RAG)
  • 【ArcGIS】绘制各省碳排放分布的中国地图
  • JAVA题目笔记(十三) 爬虫
  • python源码实例之根据出生日期判断你的星座-001
  • 1105--面试代码题
  • 网络安全渗透实际案例