Nginx location配置 正则表达式

论坛 期权论坛 脚本     
匿名技术用户   2020-12-22 18:36   82   0
一、 location 的匹配符

Syntax:


location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }


1. 语法格式:location [=|~|~*|^~|@] /uri/ { … } ,
依据不同的前缀“= ”,“^~ ”,“~ ”,“~* ”和不带任何前缀的(因为[ ] 表示可选,可以不要的),表达不同的含义,
简单的说尽管location 的/uri/ 配置一样,但前缀不一样,表达的是不同的指令含义。
注意:查询字符串不在URI范围内。例如:/films.htm?fid=123 的URI 是/films.htm 。)

2.对这些不同前缀,分下类,就2 大类:
正则location ,英文说法是location using regular expressions
普通location ,英文说法是location using literal strings 。
那么其中“~ ”和“~* ”前缀表示正则location ,“~ ”区分大小写,“~* ”不区分大小写;
其他前缀(包括:“=”,“^~ ”和“@ ”)和 无任何前缀 都属于普通location 。

详细说明:

~ 区分大小写匹配

~* 不区分大小写匹配

!~ 区分大小写不匹配
!~* 不区分大小写不匹配

^ 以什么开头的匹配

$ 以什么结尾的匹配

* 代表任意字符

文件及目录匹配

-f和!-f用来判断是否存在文件

-d和!-d用来判断是否存在目录

-e和!-e用来判断是否存在文件或目录

-x和!-x用来判断文件是否可执行


3.匹配符优先级
1.=
2.空匹配符,满足精确匹配时
3.^~
4.~或~*
5.空匹配符,满足以指定模式开始时的匹配时


匹配规则是:最大前缀匹配(与顺序无关)
如果恰好是严格精确匹配结果或者加有前缀“ ^~ ”或“ = 则停止搜索正则 location
对于正则 location 的匹配规则是:按编辑顺序逐个匹配(与顺序有关)
只要匹配上,就立即停止后面的搜索



实例分析:

location = / { configuration A }

# = 表示精确的查找地址,如location = / 它只会匹配uri为/的请求

如果请求为/index.html,将查找另外的location,而不会匹配这个,
当然可以写两个location,location = /和location /,这样/index.html将匹配到后者
如果你的站点对/的请求量较大,可以使用这个方法来加快请求的响应速度。


location / { configuration B }

# 遵守普通location 的最大前缀匹配,由于任何URI 都必然以“/ ”根开头,所以对于一个URI ,如果有更specific 的 匹配,那自然是选这个更specific 的,如果没有,“/ ”一定能为这个URI 垫背(至少能匹配到“/ ”),也就是说“ location / {} ”有点默认配置的味道,其他更specific的配置能覆盖overwrite 这个默认配置
(这也是为什么我们总能看到location / {} 这个配置的一个很重要的原因)


location ^~ /images/ { configuration C }

# 匹配任何已/images/开头的查询并且停止搜索。任何正则表达式将不会被测试

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

# 匹配任何已.gif、.jpg 或 .jpeg 结尾的请求,但是 所有 /images/开头的请求 会匹配到 configuration C


location @named { configuration E }
#
它是专门用来处理“内部重定向(internally redirected )


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP