Nginx--Location

264 阅读2分钟
  • 语法:location [=|~|~*|^~] /uri/ { ... }
  • 默认值:无
  • 上下文:server

根据url不同进行不同配置,可以使用字符串也可以使用正则表达式匹配路由。

~*:不区分大小写匹配。

~:区分大小写的匹配。

匹配规则

正则表达式的优先级比较高,通常会检测文字字符串(区分大小写,使用具体匹配原则),之后按照文件中定义的顺序检测正则表达式,匹配到第一个正则表达式将停止匹配,未找到正则表达式则按照文字字符串的检测结果。

改变以上行为有两种办法:

  1. 第一种是使用前缀=:仅匹配精确查找,查询匹配则立即停止查找,处理请求。例如请求"/"频繁出现,那么使用
lication =/ {}

将会加快此请求的处理速度。

  1. 另一种是使用前缀^~:此前缀与文字字符串一起使用,相当于告诉nginx当文字字符串匹配时,不进行正则表达式的匹配。

匹配规则如下:

  1. =:完全匹配,找到之后立即停止。
  2. 常规字符串所有指令,若指令中使用了^~前缀,会立刻停止匹配。
  3. 正则表达式,按照在配置文件中的定义顺序执行。
  4. 若3中找到结果,则使用该结果,否则使用2中的匹配项。

示例

location  = / {
  # 仅匹配 / 
  [ configuration A ] 
}
location  / {
  # 匹配任何查询,所有的查询都以/开头,但是正则表达式和任何更长的常规块将首先匹配
  [ configuration B ] 
}
location ^~ /images/ {
  # 匹配任何以 /images/ 开头的查询并停止搜索,因此不会检查正则表达式。
  [ configuration C ] 
}
location ~* .(gif|jpg|jpeg)$ {
  #匹配任何以 gif、jpg 或 jpeg 结尾的请求。
  #然而,所有 /images/ 目录的请求都将由Configuration C。
  [ configuration D ] 
}
​
  • /-> 配置A
  • /documents/document.html -> 配置 B
  • /images/1.gif-> 配置 C
  • /documents/1.jpg-> 配置 D