架构师之路-学渣到学霸历程-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,亲爱的朋友们:
- 感谢你们耐心完这个笔记,如果笔记中出现的一些软件包、资源找不到的可以直接留言&私聊,我看见了就回复;
- 资源免费共享;有需要滴滴,(仅仅是我有的)
我的坚持初衷:💕立志要成为一名架构师
- 不断地去坚持学,其中的各种各样的难度,不言而喻~!
- 坚持不是一件容易的事情,但它却是成功的关键。做起来吧~!
如果你也想要坚持:那么组团吧,咋们一块互相监督;一天一点分享也是进步;最怕就是孤军奋战!加油吧,追梦人~!