Nginx配置文件中的location处理规则,受ngx_http_core_module这个模块控制,是nginx服务进行URL匹配的重点。由于手头的这台云主机同时承担了个人博客、云盘、演示demo等多个web服务,所以需要规划好nginx对不同URL的转发,通过参考nginx官方文档中对location的解释,记录下笔记。
官方指出,location可以由前缀字符串或正则表达式来指定。语法如下:
location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... }
其中,第一种是常见的匹配方式,第二种@符号主要用于nginx内部的重定向,目前我基本没见到过这个参数的实际使用场景,我们暂时忽略它。
符号说明
这里说明一下语法中出现的各个符号的含义:
参数 | 功能 |
---|---|
= | 等号,精确匹配 |
~ | "~"用于匹配对大小写敏感的情况,即匹配过程中区分大小写 |
~* | "~*"用于匹配不敏感大小写的情况,即匹配过程中不区分大小写 |
^ | 表示以什么开头 |
匹配机制
对于收到的URL请求,nginx会首先尝试匹配那些写死的固定字符串,这个过程中遵循最长匹配原则(即尽可能精确匹配),匹配成功后暂时记录下来该location的位置(先不执行location内的动作)。
当固定字符串location查询完毕后,接下来会去检查含有正则表达式的location,此时是按照写在配置文件中的顺序从上往下查询。一旦正则表达式所在的location匹配成功,会马上执行当前location内部的配置;当所有的正则表达式location都查询完毕后没有匹配成功,此时会使用之前暂时记录下来的固定字符串对应的location内的配置。
- 特殊情况
官方指出,有几种特殊情况,不适用于上面的匹配机制。
含有=的固定字符串所在location一旦匹配成功,马上停止匹配,直接执行,优先级最高。
含有^~的固定字符串所在location一旦匹配成功,马上停止匹配,直接执行。
另外,对于旧版本0.7.1到0.8.41的nginx,一旦有完整的固定字符串所在location一旦匹配成功,马上停止匹配,直接执行。
评论列表,共 0 条评论
暂无评论