Nginx配置location字段说明

  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 条评论

    暂无评论