Nginx处理请求的过程
/ 01
当一条HTTP请求过来时,nginx根据配置监听的端口号以及server_name配置的域名找到对应的server块,在server块中,通过对请求中的URI进行匹配来确定需要执行的location块。
——————
Nginx的location块匹配
/ 02
Nginx 的location匹配可以分为两大类:前缀字符串匹配和正则表达式匹配。
location配置的语法:
Syntax: location [=|~|~*|^] uri {...}
location @name{...}
Default: -
Context: server, location
=:前缀字符串匹配,表示精确匹配,URI匹配即执行对应的location块
~*:正则匹配,不区分大小写的正则匹配
^~:前缀字符串匹配,若匹配的最长前缀字符串存在这个修饰符,则不再进行后续的匹配
@:前缀@定义了一个命名位置。这样的位置不用于常规http请求处理,而是用于请求重定向。只能被Nginx内部配置指令所访问。
——————
Nginx的location匹配的顺序
/ 03
location匹配过程中先进行前缀字符串匹配,后进行正则匹配。匹配顺序如下图:
nginx首先查找前缀字符串匹配,若精确匹配成功,则停止匹配,执行对应的location块;若失败则找出匹配中最长的前缀字符串。若最长前缀前存在修饰符^~, 则匹配停止,否则按照出现的顺序进行正则匹配。正则匹配成功即停止,如果正则匹配失败,则使用已经找出的最长的前缀字符串匹配,执行对应的location块。
Nginx的location匹配测试:
Nginx的配置文件如下:
[root@
www
vhosts]
# cat loc_web.conf
server{
listen
18081
;
location
= /{
return
200
A;
}
location
/ {
return
200
B;
}
location
/testfile/ {
return
200
C;
}
location
^~/static/
{
return
200
D;
}
location
~*.(gif|jpg|jpeg)$ {
return
200
E;
}
}
[root@
www
vhosts]
#
http://127.0.0.1:18081/,返回值为A
http://127.0.0.1:18081/index.html,返回值为 B
http://127.0.0.1:18081/testfile/web.html,返回值为C
http://127.0.0.1:18081/static/test.gif,返回值为D
http://127.0.0.1:18081/testfile/test.gif,返回值为E
——————
参考文章
/ 04
原文始发于微信公众号(EBCloud):Nginx的Location匹配规则
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论