最近在研究了nginx,整理了一些小知识,如果熟悉了对建站能提供不少帮助。
uri匹配篇
语法说明
location [=|~|~*|^~|@] /uri/ { … }
语法
以下三个为【普通匹配】类型
location = /uri/ { … }
严格匹配
location /uri/ { … }
最大前缀匹配
location ^~ /uri/ { … }
最大前缀匹配 忽略正则匹配
以下二个为【正则匹配】类型
location ~ /uri/ { … }
区分大小写
location ~* /uri/ { … }
不区分大小写
以下一个为【内部定向】类型
location @ /uri/ { … }
内部定向
匹配规律
规律大致整理如下,但并不是绝对的。特殊情况以下会具体列出来。
通常情况下先【普通匹配】再【正则匹配】
#/uri/log.txt
location /uri/log.txt { configuration A }
location ~ log.txt$ { configuration B }
#结果:configuration B
以下两种情况【普通匹配】后不在继续【正则匹配】了
#/uri/log.txt
location ^~ /uri/log.txt { configuration A }
location ~ log.txt$ { configuration B }
#结果:configuration A
#/uri/log.txt
location = /uri/log.txt { configuration A }
location ~ log.txt$ { configuration B }
#结果:configuration A
【普通匹配】与【普通匹配】按着最大前缀匹配原则 注:与先后顺序无关
#/uri/dir/log.txt
location /uri/ { configuration A }
location /uri/dir/ { configuration B }
location /uri/dir/log.txt { configuration C }
#结果:configuration C
【普通匹配】与【普通匹配】之间严格匹配优先
#/uri/dir/log.txt
location = /uri/dir/log.txt { configuration A }
location /uri/dir/log.txt { configuration B }
#结果:configuration A
【正则匹配】与【正则匹配】之间按着顺序取先匹配上的
#/uri/dir/log.txt
location ~ txt$ { configuration A }
location ~ log.txt$ { configuration B }
#结果:configuration A
下面我们再看这两个常见的写法就很容易理解了
location / { configuration A }
location = / { configuration B }
根据上面的定义可以判断出这两个都是【普通匹配】类型的,其中 location / {}
这种写法匹配所有的uri请求,如果有更适合的【普通匹配】或者【正则匹配】那么就会被覆盖掉,所以这种写法是优先级最低的,另外一个location = / {}
是严格匹配的所以只有访问/
根目录的时候才会被匹配,并且不会继续【正则匹配】了
Comments | 2 条评论
博主 kkk
请问这里以前是一个论坛吗?
博主 罐子上的猫
@kkk 嗯嗯 是啊 很久很久以前是一个论坛,莫非。。你也是以前论坛里的小伙伴么?