nginx之location
1locations简介
location的主要作用就是根据用户请求的uri来执行不同的应用。
2location的语法
location [=|~|~*|^~|@] uri{...........} 官方地址:http://nginx.org/en/docs/http/ngx_http_core_module.html#location
location | [=|~|~*|^~|@] | uri | {} |
指令 | 匹配标识 | 匹配的普通字符串地址,或者正则表达式 | 匹配成功后要执行的配置段 |
-2.1正则location (location using regular expressions)
“~ ”和“~* ”前缀表示正则location ,
“~ ”区分大小写,“~* ”不区分大小写;
2.2普通location(location using literal strings)
其他前缀(包括:“=”,“^~ ”和“@ ”)和无任何前缀的都属于普通location ,不做正则表达式的检查
3匹配规则
这里先交代匹配规则:
匹配 规则是:
引用别人的一句:“正则 location 匹配让步普通location 的严格精确匹配结果;但覆盖普通 location 的最大前缀匹配结果”。
先匹配普通location ,再匹配正则表达式
在普通location内部(假设没有正则,那么按照最大前缀来匹配))
正则location:正则location 按照 在配置文件中的物理顺序来匹配,与顺序有关。
说明一点:对于匹配普通location——》匹配完了“普通location ”(按照最大前缀匹配来匹配)指令,还需要继续匹配“正则location ”,如果匹配到正则location那么正则location ”覆盖 “普通location ”的最大前缀匹配,最终匹配到正则location。
匹配完了“普通location ”指令,我们不需要继续匹配“正则location ”,我们可以通过nginx.conf来做到。
1在“普通location ”前面加上“^~ ”符号(^ 表示“非”,~ 表示“正则”,字符意思是:不要继续匹配正则)。
2在“普通location ”前面加上“=”符号
3当“最大前缀”匹配恰好就是一个“严格精确(exact match )”匹配,照样会停止后面的搜索
简单解释下上边两个的区别:
共同点是它们都能阻止继续搜索正则location ,
不同点是“^~ ”依然遵守“最大前缀”匹配规则,然而“= ”不是“最大前缀”,而是必须是严格匹配(exact match )。