美文网首页
nginx location 模块

nginx location 模块

作者: Kokoronashi | 来源:发表于2019-01-08 19:50 被阅读0次

nginx location ( 属于Nginx core 模块 )

官方文档:http://nginx.org/en/docs/http/ngx_http_core_module.html#location

Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... }
Default:
Context: server, location

location 分类及用法

location 分为两类 普通 location 和 正则 location

Syntax 分类 说明
location [ = | ^~ | @ ] uri { ... } 普通 location 不带任何前缀 或 = ^~ @ 前缀是普通 location
location [ ~ | ~* ] uri { ... } 正则 location 带 ~ 和 ~* 前缀是正则 location

location 执行流程

  1. 先 匹配普通 location, 匹配到后继续搜索其他普通 location, 选择最大前缀匹配结果,临时保存.
  2. 再 匹配正则 location, 正则匹配内部按照顺序 ( 编辑顺序,从上到下 )匹配,匹配到第一条正则location,则不继续匹配后面正则location,覆盖最大前缀的普通匹配结果,使用.
  3. 如果未能 匹配到正则 location,则使用普通location的最大前缀匹配结果.
  4. 通常的规则是,匹配完了“普通location ”指令,还需要继续匹配“正则location ”,但是可以告诉Nginx :匹配到了“普通location ”后,不再需要继续匹配“正则location ”了,只要在“普通location ”前面加上“^~ ”符号(^ 表示“非”,~ 表示“正则”,字符意思是:不要继续匹配正则),还可以 前面加上 "=" 符号,(= 表示精确匹配)
  5. ^~ 和 = 都能阻止继续搜索正则location,区别是, ^~ 也遵守最大前缀匹配规则,需要继续匹配最大前缀,=是严格匹配,不遵守最大匹配规则.直接使用.

正则 location 匹配让步普通location 的严格精确匹配结果( =和^~ );但覆盖普通 location 的最大前缀匹配结果

文章开始说了location 的语法中,可以有“= ”,“^~ ”,“~ ”和“~* ”前缀,或者干脆没有任何前缀,还有“@ ”前缀,但是后面的分析我们始终没有谈到“@ ”前缀。文章最后点内容,介绍了“@”的用途:“@ ”是用来定义“Named Location ”的(你可以理解为独立于“普通location (location using literal strings )”和“正则location (location using regular expressions )”之外的第三种类型),这种“Named Location ”不是用来处理普通的HTTP 请求的,它是专门用来处理“内部重定向(internally redirected )”请求的。注意:这里说的“内部重定向(internally redirected )”或许说成“forward ”会好点,以为内internally redirected 是不需要跟浏览器交互的,纯粹是服务端的一个转发行为。

相关文章

网友评论

      本文标题:nginx location 模块

      本文链接:https://www.haomeiwen.com/subject/jvgbrqtx.html