• nginx中location匹配顺序


    一、location语法

    语法:

    Syntax:    location [ = | ~ | ~* | ^~ ] uri { ... }
    location @name { ... }
    Default:    —
    Context:    server, location

    分类:

    正则location和普通location

    正则location  “~”和“~*”:~”表示区分大小写;“~*”表示不区分大小写

    普通location:  除了上面其余全是(包括没有前缀) “=”,“^~”,“@”

    “^~”中的“^”表示非,“~”表示正则,意思为不要继续匹配正则

    “=”也表示阻止正则location,和“^~”的区别为:“^~”依然遵守“最大前缀”匹配;而“=”必须是严格匹配。

    “@ ”是用来定义“Named Location ”的(可以理解为独立于“普通location”和“正则location”之外的第三种类型),这种“Named Location ”不是用来处理普通的HTTP 请求的,它

    是专门用来处理“内部重定向(internally redirected )”请求的。

    注意:这里说的“内部重定向(internally redirected )”是不需要跟浏览器交互的,纯粹是服务端的一个转发行为。

    二、匹配顺序

    匹配顺序总结为以下两点:

    1.匹配的顺序是先匹配普通字符串,然后再匹配正则表达式。另外普通字符串匹配顺序是根据配置中字符长度从长到短,也就是说使用普通字符串配置的location顺序是无关紧要的,反正最后nginx会根据配置的长短来进行匹配,但是需要注意的是正则表达式按照配置文件里的顺序测试。找到第一个匹配的正则表达式将停止搜索。

    2.一般情况下,匹配成功了普通字符串location后还会进行正则表达式location匹配。有两种方法改变这种行为,其一就是使用“=”前缀,这时执行的是严格匹配,并且匹配成功后立即停止其他匹配,同时处理这个请求;另外一种就是使用“^~”前缀,如果把这个前缀用于一个常规字符串那么告诉nginx 如果路径匹配那么不测试正则表达式。

    三、注意事项

    1.nginx匹配顺序是先匹配普通location,在匹配正则location;

    2.普通匹配规则无顺序无论写在配置文件的那个地方都一样,但是正则匹配则是按照匹配配置文件中由上到下的先后顺序匹配;

    更多详情参考官网:http://nginx.org/en/docs/http/ngx_http_core_module.html

  • 相关阅读:
    SQL Server 2008 官方简体中文正式版【附开发版和企业版序列号】
    安装SQL 2008 重启之后 一再提示重启计算机问题
    wp7使用C#通过后台动态生成Grid网格布局
    wp7中空格的编码
    vs.php 2.10 for 2010 注册码
    hive 优化
    Remove '@Override' annotation错误
    ucfirst
    Hadoop错误
    git patch 转帖
  • 原文地址:https://www.cnblogs.com/wdliu/p/8178527.html
Copyright © 2020-2023  润新知