Nginx 之 location 指令匹配规则

location 指令的匹配命令如下:

  • ~,执行一个区分大小写的正则匹配。
  • ~*,执行一个不区分大小写的正则匹配。
  • ^~,普通字符匹配,通常用于匹配目录。
  • =,普通字符精确匹配。
  • @,定义一个命名的 location,用在内部定向中。

    例如 error_page 或 try_files 中。

location 上下文的优先级与它在 nginx.conf 文件中的位置无关,只与正则表达式的类型有关。对于相同类型的表达式,会优先匹配字符串长的 location。

  • 第一优先级,= 类型表达式。一旦匹配成功,不再查找其他匹配项。
  • 第二优先级,^~ 类型表达式。一旦匹配成功,不再查找其他匹配项。
  • 第三优先级,~/~* 类型表达式。若有多个 location 的正则匹配,使用匹配最长的那个。
  • 第四优先级,常规字符串类型,按前缀匹配。

配置示例

location = / {
    ...
}

仅匹配来自 / 的请求。

location / {
    ...
}

匹配所有以 / 开头的请求。

若有更长的同类型表达式,则选择更长的表达式。

若有正则表达式可以匹配,则优先匹配正则表达式。

location ^~ /images/ {
    ...
}

匹配所有以 /images/ 开头的请求,若匹配成功,则停止匹配查找。

location ~* \.(gif|jpg|jpeg)$ {
    ...
}

匹配所有以 gif、jpg 和 jpeg 结尾的请求,若匹配成功,则停止匹配查找。

若有以 /images/ 开头的请求,则会使用前一个配置。

猜你喜欢

转载自www.cnblogs.com/reghao/p/8975246.html