Nginx配置中Location的匹配规则

Location匹配的url的语法规则:

location [=|~|~*|^~] /uri/ { … }

=  表示精确匹配

~  表示区分大小写的正则匹配

^~ 表示以某个常规字符串开头的url即可;

~* 表示不区分大消息的正则匹配

!~(*!~)表示不区分大小写不匹配的正则

/  通配符,任何请求都能匹配到这个location,如果有任何其他location可以匹配,则会覆盖该location

匹配顺序:

1)先匹配普通url,在匹配正则

2)“普通 location ”的匹配规则是“最大前缀”,因此“普通 location ”的确与 location 编辑顺序无关;

3)location的执行逻辑基本上跟顺序没有关系;但是针对正则匹配的方式,匹配上第一个url,就不在继续匹配后面的url;

这种情况,如果匹配上普通localtion,没有正则匹配,则使用普通匹配;如果既有普通location的最大前缀匹配,也有正则匹配,则正则匹配覆盖最大前缀匹配。

4)匹配完“普通 location ”后,有的时候需要继续匹配“正则 location ”,有的时候则不需要继续匹配“正则 location ”。

两种情况下,不需要继续匹配正则 location :(1) 当普通 location 前面指定了“ ^~ ”,特别告诉 Nginx 本条普通 location 一旦匹配上,则不需要继续正则匹配;(2) 当普通location 恰好严格匹配上,不是最大前缀匹配,则不再继续匹配正则。

例如:

location  = / {
  # matches the query / only.
  [ configuration A ]
}
location  / {
  # matches any query, since all queries begin with /, but regular
  # expressions and any longer conventional blocks will be
  # matched first.
  [ configuration B ]
}
location /documents/ {
  # matches any query beginning with /documents/ and continues searching,
  # so regular expressions will be checked. This will be matched only if
  # regular expressions don‘t find a match.
  [ configuration C ]
}
location ^~ /images/ {
  # matches any query beginning with /images/ and halts searching,
  # so regular expressions will not be checked.
  [ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
  # matches any request ending in gif, jpg, or jpeg. However, all
  # requests to the /images/ directory will be handled by
  # Configuration D.
  [ configuration E ]
}

请求示例,匹配的Location:

  • / -> configuration A
  • /index.html -> configuration B
  • /documents/document.html -> configuration C
  • /images/1.gif -> configuration D
  • /documents/1.jpg -> configuration E
时间: 2024-10-05 06:37:24

Nginx配置中Location的匹配规则的相关文章

Nginx 配置指令location 匹配符优先级和安全问题【转】

Nginx配置指令location匹配符优先级和安全问题 使用nginx 很久了,它的性能高,稳定性表现也很好,得到了很多人的认可.特别是它的配置,有点像写程序一样,每行命令结尾一个";"号,语句块用"{}"括起来.配制好,直接nginx -t 检查配制情况,配制成功,直接运行:service nginx reload.服务器没有任何宕机情况下,实现平稳修改配置.最近一直在做location 配置,遇到优先级别问题(如果配置不当可能存在安全隐患哦),以下是个人学习一

Nginx 之 location 指令匹配规则

location 指令的匹配命令如下: ~,执行一个区分大小写的正则匹配. ~*,执行一个不区分大小写的正则匹配. ^~,普通字符匹配,通常用于匹配目录. =,普通字符精确匹配. @,定义一个命名的 location,用在内部定向中. 例如 error_page 或 try_files 中. location 上下文的优先级与它在 nginx.conf 文件中的位置无关,只与正则表达式的类型有关.对于相同类型的表达式,会优先匹配字符串长的 location. 第一优先级,= 类型表达式.一旦匹配

JavaScript中正则表达式判断匹配规则以及常用的方法

JavaScript中正则表达式判断匹配规则以及常用的方法: 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在. 正则表达式是一种用来匹配字符串的强有力的武器.它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它"匹配"了. \d可以匹配一个数字                 '00\d'可以匹配'007' ,'\d\d\d'可以匹配'010' \w可以匹配一个字母或数字      '\w\w'可以匹配'js' \s可

让Nginx路径中的子目录匹配文件夹的另一种写法

其实相当于对路径做一种通配符,根据路径名访问相应的文件夹.直接看高潮部分如下.. location /static { root /var/www/usmt; index index.html board.html 03-multiple-grids.html; set $real_script ''; if ( $fastcgi_script_name ~ /static(.*) ){ # 根据location的匹配规则,$1不会为空 set $real_script $1; } # 访问时会

转:Nginx配置指令location匹配符优先级和安全问题

转:http://www.jb51.net/article/47761.htm 使用nginx 很久了,它的性能高,稳定性表现也很好,得到了很多人的认可.特别是它的配置,有点像写程序一样,每行命令结尾一个";"号,语句块用"{}"括起来. 配制好,直接nginx -t 检查配制情况,配制成功,直接运行:service nginx reload .服务器没有任何宕机情况下,实现平稳修改配置 最近一直在做location 配置,遇到优先级别问题(如果配置不当可能存在安全

nginx配置—之location模式匹配

1.location正则 ~ 表示一个正则匹配,区分大小写 ~* 表示一个正则匹配,不区分大小写 ^~ 表示普通字符匹配,一般用来匹配目录 = 表示普通字符精确匹配 @ 定义一个自命名的location,用来在内部重定向,例如 error_page, try_files 2.location匹配的优先级 (1)location匹配的优先级与location在配置文件中的顺序无关(2)精确匹配( = ),首先处理精确匹配,如果匹配上,就停止搜索其他匹配(3)普通字符匹配( ^~ ),越精确匹配,优

Go的http包中默认路由匹配规则

# 一.执行流程 首先我们构建一个简单http server: ```go package main import ( "log" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("hello world")) }) log.Fatal(http.Liste

Nginx配置之location模块和proxy模块

1.location指令的用法介绍 Location主要用来匹配url,如:http://www.beyond.com/nice,在这里对于location来说www.beyond.com是域名,/nice才是url.对于url的匹配,可以使用字符串或者正则表达式,但如果是正则表达式,必须指定前缀,location指令来匹配不同的url,匹配成功后应用不同的配置语法:location [=|~|~*|^~|@]/url {…..}[=]精确匹配,如果找到匹配等号的内容,立即停止搜索,并立即处理请

Nginx 配置中 fastcgi_index 起什么作用?

1,fastcgi_index 语法:fastcgi_index file 默认值:none 使用字段:http, server, location 如果URI以斜线结尾,文件名将追加到URI后面,这个值将存储在变量$fastcgi_script_name中.例如: fastcgi_index  index.php; fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name; 请求"/page.php&qu