0
点赞
收藏
分享

微信扫一扫

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

_铁马冰河_ 2024-11-06 阅读 18

Nginx的location精讲

今天分享的就是nginx的location规则,介绍location的修饰符; 大体上的理解就是访问具体的某一资源的路径是怎么配的,​这些概念需要先了解一下;

1、location的概念

location是其中一个指令块,相当与一个server中的一个资源;

可以决定客户发过来的请求URI如何处理;一个server里头也可以有多个location的配置

1.1 语法:

Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default: —
Context: server, location

语法:location 可以跟着这些符号,然后接上路径
作用范围:server中的location

1.2 location的配置可以有两种:

  • 可以在server指令块中配置;
  • 也可以在location指令块中配置

1.3 配置语法:

  • 修饰符 + uri(资源路径)
  • @ + name

1.4 修饰符的具体说明

= :			精确匹配(必须全部相等)
~ :			大小写敏感(正则表达式)
~* :		忽略大小写(正则表达式),这里要注意忽略大小写的意思是请求的字符大小写都可以,
但是不会进行大小转换,请求的大小写对应的文件必须存在。
^~ :		只需匹配uri部分
@ :			内部服务跳转

2、Location+修饰符说明

在操作前,咋们做个语法高亮的实验:

#把源码文件的vim的语法高亮配置复制到本机的vim上面
[root@Linux2 nginx]# cp -r  /usr/local/src/nginx-1.27.2/contrib/vim/* /usr/share/vim/vimfiles/
	#复制完成之后就能够完成语法高亮

2.1、精准匹配

= 精准匹配,一般是匹配某个具体的文件夹

案例说明:

#配置一下规则
[root@Linux2 nginx]# vim conf/nginx.conf
......
	#在server写一个location
        location = /liangjiawei {
                        index index.html index.htm;
                }
	#说明:如果你访问192.168.75.72/liangjiawei/,就会匹配到里面的内容
	
#重载配置文件
[root@Linux2 nginx]# nginx  -s reload
	#测试
[root@Linux2 nginx]# curl 192.168.75.72/liangjiawei/
这个是=号的html 

2.2、大小写敏感匹配:

~,大小写敏感(正则表达式)。

案例说明:

#配置一下规则
[root@Linux2 nginx]# vim conf/nginx.conf
......
	#在server写一个location
        location ~  /AA/ {
                        root /data/;
                        index index.html index.htm;
                }
   #说明如下
   	#如果请求:192.168.75.72/AA/		则可以访问到内容
   	#如果请求:192.168.75.72/aa/		则访问失败
#重载配置文件
[root@Linux2 nginx]# nginx  -s reload

#添加测试资源
[root@Linux2 nginx]# mkdir /data/AA/
[root@Linux2 nginx]# echo "这个是~的大写资源" > /data/AA/index.html

#访问测试
	#大写资源能够显示
[root@Linux2 nginx]# curl 192.168.75.72/AA/
这个是~的大写资源
	#小写则是报404
[root@Linux2 nginx]# curl 192.168.75.72/aa/
<html>
<head><title>404 Not Found</title></head>

2.3、大小写不敏感匹配:

~*,大小写忽略(正则表达式)。

案例说明:

#配置一下规则
[root@Linux2 nginx]# vim conf/nginx.conf
......
	#在server写一个location
        location ~^  /bb.html {
                        root /data/AA/;
                        index index.html index.htm;
                }
   #说明如下
   	#会直接忽略 uri 部分的大小写
   	#如果请求:192.168.75.72/bb.html	可以访问到内容
   	#如果请求:192.168.75.72/BB.HTML	可以成功匹配,但是目录中要BB.HTML文件
#重载配置文件
[root@Linux2 nginx]# nginx  -s reload

#添加测试资源
[root@Linux2 nginx]# echo "这个是~*的大小写都可以的资源测试" > /data/AA/bb.html
[root@Linux2 nginx]# echo "这个是大写的BB.HTML的资源" > /data/AA/BB.HTML

	#测试:
[root@Linux2 nginx]# curl 192.168.75.72/bb.html
这个是~*的大小写都可以的资源测试
[root@Linux2 nginx]# curl 192.168.75.72/BB.HTML
这个是大写的BB.HTML的资源

2.4、指定后缀匹配:

匹配以gif、jpg、jpeg结尾的文件

案例说明:

#配置一下规则
[root@Linux2 nginx]# vim conf/nginx.conf
......
	#在server写一个location
        location ~*  \.(gif|jpg|jpeg)$  {
                        root /data/AA/;
                        index index.html index.htm;
                }
	#备注说明:192.168.75.72/liangjiawei.jpg 可以访问成功

#添加测试资源
[root@Linux2 nginx]# echo "这个是:~*  \.(gif|jpg|jpeg)$ 的测试" > /data/liangjiawei.png
	#测试
[root@Linux2 nginx]# curl 192.168.75.72/liangjiawei.png
这个是:~*  \.(gif|jpg|jpeg)$ 的测试

2.5 忽略正则匹配:

^~,只匹配以 uri 开头,匹配成功以后,会停止搜索后面的正则表达式匹配

案例说明

#配置一下规则
[root@Linux2 nginx]# vim conf/nginx.conf
......
	#在server写一个location
        location ^~ /AA/   {
                        root /data/AA/;
                        index index.html index.htm;
                }
	#备注说明:#以 /AA/ 开头的请求,都会匹配上
			#192.168.75.72/AA/liangjiawei.jpg 可以成功
			#192.168.75.72/AA/liangjiawei.png 也可以成功
#添加测试资源
[root@Linux2 nginx]# echo "这个是^~的测试资源" > /data/AA/liangjiawei.png
[root@Linux2 nginx]# echo "这个是^~的测试资源" > /data/AA/liangjiawei.jpg
	#测试
[root@Linux2 nginx]# curl 192.168.75.72/AA/liangjiawei.png
这个是^~的测试资源

如果配置了2.5,那么所有请求 /AA/ 下的图片会被上面的处理,因为 ^~ 指令匹配到了,则不检查正则表达式。对比这两个location,可以设置不同目录,相同文件进行实验

分享环节:

hi,亲爱的朋友们:

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

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

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

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

举报

相关推荐

0 条评论