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