zoukankan      html  css  js  c++  java
  • [整理] Nginx Location 匹配规则

    规则语法

    语法 匹配规则
    普通匹配(遵循最大前缀匹配规则, 优先度比正则低)
    = 精确(严格)匹配
    ^~ 非正则匹配(依然遵循最大前缀匹配规则)
    ~ 表示区分大小写的正则匹配
    ~* 表示不区分大小写的正则匹配
    !~ 和 !~* 别为区分大小写不匹配及不区分大小写不匹配 的正则
    / 通用匹配,任何请求都会匹配到

    location 分类

    只有两类:正则location和普通location

    ~~* 为正则location
    =^~@和无任何前缀的都属于普通location,另外,@是用作服务端内部的一种转发行为,很少用,在此不做讨论。

    匹配顺序:

    1. 先普通,再正则
    2. 普通location之间的匹配顺序:按最大前缀匹配
      location /a/{}location /a/b/ {},请求 http://a/b/c.html 匹配的是 location /a/b/ {}
    3. 正则location之间的匹配顺序:按配置文件中的物理顺序匹配,只要匹配到一条正则,就不再考虑后面的
    4. 普通location与正则location之间的匹配结果选择
      1. 普通location先匹配,匹配到了结果,只是一个临时结果;
      2. 会继续正则location的匹配,
        1. 如果匹配到正则,则用匹配到的正则结果;
        2. 如果没有匹配到正则,则继续用普通匹配的那个结果

    综上,常规的顺序是匹配完普通location,还要继续匹配正则location,但是,也可以告诉nginx,匹配到了普通location,就不要再搜索匹配正则location了,通过在普通location前面加上^~符号,^表示非,~表示正则,^~就是表示不要继续匹配正则。

    除了^~=也可阻止nginx继续匹配正则,区别在于^~依然遵循最大前缀匹配规则,而=是严格匹配

    扩展

    location / {}location =/ {}的区别

    / {}作为普通匹配,是遵循最大前缀匹配原则的,所以,对于一个url,如果有更特殊合适的匹配,就选特殊合适的,如果没有更特殊合适的匹配,也有 / {}兜着,就像是默认配置一样

    =/ {} 遵循的是严格匹配规则,只能匹配到 http://ip:port/,同时会停止搜索正则匹配。

    如何快速测试

    location ~* /a {
            return 999;
        }
    

    直接reuturn 某个数字, 该数字会作为返回的http 状态码(自行F12打开开发者工具查看)

  • 相关阅读:
    批量修改mp3文件播放速度
    尝试了一下alsa录音播放的编程。
    最快速获取天气的方法
    乒乓Buffer
    GCC编译选项和环境变量
    Linux发行版本
    memcpy 和 memmove
    自动定位android ndk的路径
    记一下,安装和使用Ubuntu过程中遇到的问题
    Android API 和Android 版本对照
  • 原文地址:https://www.cnblogs.com/youjiaxing/p/10084357.html
Copyright © 2011-2022 走看看