nginx之location

一. location使用语法

location [ = | ~ | ~* | ^~ ] URI {

...

}

说明:

1. 其中URI可以是普通的字符串地址路径,或者是正则表达式,匹配成功后执行后面大括号里的相关指令

2. URI前面的匹配标识说明

  = 开头表示精确匹配,
  /和^~ 开头表示常规字符串,
  正则表达式匹配可以使用 ~(区分大小写匹配)和 ~* (不区分大小写匹配),!~ 和 !~* 则表示不匹配

总结
1. 普通location会先于正则location进行匹配。
2. 如果匹配到普通之后,想结束不再匹配正则的location,那么可以在普通的location前面加上 ^~这两个符号。
3. 如果继续匹配正则location,正则匹配到的结果会覆盖普通匹配到的结果。
4. 匹配正则的过程中,和正则的为上下位置有关系,因为正则location是匹配到一个随即停止匹配。并不存在普通location的最大前缀匹配原则。

二. location匹配示例

location = / {
        [ 配置1 ]
}

location / {
        [ 配置2 ]
}

location /documents/ {
        [ 配置3 ]
}

location ^~ /images/ {
        [ 配置4 ]
}

location ~* .(gif|jpg|jpeg)$ {
        [ 配置5 ]
}

不同URI对应的配置

用户请求的URI 完整的URL地址 匹配的配置
/ http://www.etiantian.org/ 配置1
/index.html http://www.etiantian.org/index.html 配置2
/documents/document.html http://www.etiantian.org/documents/document.html 配置3
/images/1.gif http://www.etiantian.org/images/1.gif 配置4
/documents/1.jpg http://www.etiantian.org/documents/1.jpg 配置5

三. location匹配实战

验证不同的location标签生效的顺序,nginx配置文件如下

server {
        listen    80;
        server_name    www.etiantian.org etiantian.org;
        root html/www;

        location / {
            return 401;
        }
      
        location= / {
            return 402;
        }

        location /documents/ {
            return 403;
        }

        location ^~ /images/ {  匹配任何以/images/开头的查询并停止搜索,任何正则表达式匹配不会做检查
return
404; } location ~* .(gif|jpg|jpeg)$ { return 500; } }

检查语法并使修改的配置重启生效后测试网站请求

1. 访问http://www.etiantian.org和http://www.etiantian.org/ ,返回402

说明:URL为空或者/时,匹配了location = /   ,精确匹配的优先级最高,无论放置位置如何,都将优先被匹配并执行

2. 访问http://www.etiantian.org/index.html,  http://www.etiantian.org/abc/, 都返回401

说明:/ 为默认匹配,如果没有匹配上其他location,最后会匹配默认匹配的部分,所以/abc没匹配上也会返回401

3. 访问http://www.etiantian.org/documents/document.html,会返回403

说明:此部分为路径匹配,匹配了路径/documents/

4. 访问http://www.etiantian.org/documents/1.jpg,返回500

说明:虽然会先匹配普通路径/documents,但是后面又匹配了正则,从而覆盖了前面的普通匹配

5. 访问http://www.etiantian.org/images/1.gif, 返回404

说明:首先匹配了普通路径/images, 因为/images前面有"^~"  ,所有即使1.gif匹配了正则匹配,但是也不会做检查

高级点的用法可参考:https://www.linuxidc.com/Linux/2015-03/114982.htm

原文地址:https://www.cnblogs.com/regit/p/9298533.html