您的位置:首页 > 运维架构 > Nginx

nginx里location的用法简单说明

2017-02-03 17:16 225 查看
nginx的配置指令的作用域可以分为 main,server,location这3个种,实际上这3者不是依次包含的关系,而是相互独立的关系,比如一个只具有main级别作用域的指令,是不能写在某个server或者location内的,模块的某个指令可以同时具有main,server,location这3种作用域,另外每个模块有 main,srv,loc这3个级别的配置,一个模块的main级别的配置对所有的server和location都是共享的,srv级别的配置对所有
location都是共享的,location只有自己独立的loc级别的配置,这就是为什么一个模块的srv和loc级别的配置需要merge,而 main级别的配置不需要merge的原因。

一般来说一个请求url过来,nginx会将它解析到某一个location来处理。这个解析的过程实际上根据location的配置基本可以分为字符串匹配和正则表达式匹配这2种。对于location的组织方式,最简单的就是直接将它们保存为一个链表,解析url的时候一个一个遍历即可找到相应location,但是这样效率太低,对像nginx这种高性能的服务器来说是完全不可取的,nginx将字符串匹配的location组织成了一个三叉的字符串排序树,而且建立的时候也考虑了树的平衡性。

Location语法语法:location [=|~|~*|^~] /uri/ { … }

语法解释:

= 开头表示精确匹配

/和^~ 开头表示常规字符串

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

~* 开头表示不区分大小写的正则匹配

!~ 和 !~* 分别为区分大小写不匹配及不区分大小写不匹配 的正则

多个location配置的情况下匹配顺序为:

1、首先匹配 =,其次匹配常规字符串, 其次是正则匹配。

2、精确匹配当有匹配成功的时候,停止匹配。

3、常规字符串匹配长度优先,越长优先级越高,其中以^~开头的匹配成功后不再进行正则匹配;/ 任何请求都会匹配到;nginx 不对 url 做编码,因此请求为 /static/20%/aa,可以被规则 ^~ /static/ /aa 匹配到(注意是空格)。

4、正则匹配当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

示例一:

location / { }

匹配任何查询,因为所有请求都以 / 开头。但是正则表达式规则将被优先和查询匹配。

示例二:

location =/ {}

仅仅匹配/

示例三:

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

rewrite \.(gif|jpg)$ /logo.png;



注:不区分大小写匹配任何以 gif,jpg,jpeg 结尾的文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nginx