概述
location配置指令的功能是用来匹配不同的url请求,进而对请求做不同的处理和响应
location匹配参数
参数 | 解释 |
---|---|
空 | location后没有参数直接跟着URI,表示前缀匹配,代表跟请求中的URI从头开始匹配。 |
~ | 执行一个正则匹配,区分大小写。 |
~* | 执行一个正则匹配,不区分大小写。 |
^~ | 普通字符匹配,多用来匹配目录。 |
= | 执行普通字符精确匹配。 |
@ | “@” 定义一个命名的 location,@定义的locaiton名字一般用在内部定向,例如error_page, try_files命令中。它的功能类似于编程中的goto。 |
location匹配顺序
location的匹配并不完全按照它们在配置文件中上下顺序来匹配,请求URI会按如下规则跟server里配置的location匹配
匹配优先级
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止 匹配,按当前匹配规则处理请求。
匹配示例
events {
}
http {
server {
# 匹配URL: http://127.0.0.1/*
location / {
return 200 "/";
}
# 匹配URL:http://127.0.0.1/
location = / {
return 200 "=/";
}
# 匹配URL: http://127.0.0.1/nginx
location = /nginx {
return 200 "=/nginx";
}
# 匹配URL: http://127.0.0.1/xxx/1111.PNG
location ~* \.png$ {
return 200 "all-png";
}
# 匹配URL: http://127.0.0.1/xxx/1111.jpg
location ~ \.(gif|jpg|png|js|css)$ {
return 200 "small-gif/jpg/png";
}
# 匹配URL:http://127.0.0.1/static/1111.png
location ^~ /static/ {
return 200 "static";
}
}
}
命名location
带有"@"的location是用来定义一个命名的location,这种location不参与请求匹配,一般用在内部定向。例如用在error_page, try_files命令中。它的功能类似于编程中的goto