• nginx重新整理——————http请求的11个阶段中的find_config[十三]


    前言

    简单介绍一下find_config 与 preaccess 阶段。

    正文

    find_config 很大一部分工作是进行location的匹配。

    来一张图看下location指令和merge_slashes:

    前缀字符串:

    1. 常规 比如/http,表示前缀是http,比如 http/aaa 这种。

    2. =:精确匹配,表示一定要和这个链接一模一样。

    3. ^~: 匹配上后则不再进行正则表达式匹配

    正则表达式:

    ~: 大小写敏感的正则匹配
    ~*: 忽略大小写的正则匹配

    合并连续的符号:

    merge_slashes

    用于内部跳转的命名location:

    @ 这种。

    下面给一些例子哈:

    location的匹配规则:

    然后来实验一下例子哈:

    location ~ /Test1/$ {
    	return 200 'first regular expressions match!\n';
    }
    
    location ~* /Test1/(\w+)$ {
    	return 200 'longest regular expressions match!\n';
    }
    
    location ^~ /Test1/ {
    	return 200 'stop regular expressions match!\n';
    }
    
    location /Test1/Test2 {
    		return 200 'longest prefix string match!\n';
    }
    
    location /Test1 {
    		return 200 'prefix string match!\n';
    }
    
    
    location = /Test1 {
    	return 200 'exact match!\n';
    }
    

    实验一:

    这里Test1 那么走的是精确匹配。

    实验二:

    这个是完全匹配,所以选择了3,这里有人就问了,这里~ /Test1/$ 不也是完全匹配吗?因为加了^~ 所以正则表达被拒了。

    实验三:

    可以看到其实这里面3个都匹配上了,但是因为匹配到了^~ /Test1/,字符最长,且加了^~所以选这个。

    实验四:

    因为/Test1/Test2完全匹配了,本来应该选择这个的,但是有正则匹配了,所以选正则。

    优先级规则:

    1. 精确匹配

    2. 匹配字符串最长的,如果匹配字符串最长的没有加~^,那么就会查看正则表达。

    3. 然后是有多个正则表达,那么选正则表达第一个。

    下一节介绍preaccess.

  • 相关阅读:
    从 0 开始带你成为消息中间件实战高手
    jenkins升级2.249版本后 节点(Node)配置的启动方式中没有Launch agent via Java Web Star
    Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
    centOS7 gradle版本升级
    使用PDB调试Python程序
    pytest在控制台的方式下提示找不到包
    docker-compose文件详解
    storm案例分析
    strom 简单案例
    springboot实现读写分离
  • 原文地址:https://www.cnblogs.com/aoximin/p/16218323.html
Copyright © 2020-2023  润新知