suncool 发表于 2018-11-14 12:27:41

nginx location规则优先级测试

基本语法
1
location [=|~|~*|^~|@] /uri/ { … }
〖=〗表示精确匹配,如果找到,立即停止搜索并立即处理此请求。
  〖~ 〗 表示区分大小写匹配
  〖~*〗 表示不区分大小写匹配
  〖^~ 〗 表示只匹配字符串,不查询正则表达式。
  〖@〗 指定一个命名的location,一般只用于内部重定向请求。
  
  
  
  先来测试下区分大小写和不区分大小写的优先级

  测试结果为
  http://192.168.1.164/2a.txt ------------501
  http://192.168.1.164/2A.txt------------504
  
  将顺序反下,将~*放前面

  结果
  http://192.168.1.164/2a.txt ----------501
  http://192.168.1.164/2A.txt ----------501
  
  结论: 去分和不区分大小写的正则匹配优先级相同,以先后顺序来决定匹配哪一个.
  
  
  再来比较=与~的优先级

  结果
  http://192.168.1.164/2a.txt -------------502
  结论: =的优先级比~高
  
  再来比较下 ^~ 与 ~的优先级

  结果
  http://192.168.1.164/2a.txt--------------504
  结论
  ^~的优先级比~高
  
  
  再测试 ^~ 与 = 的优先级

  结果
  http://192.168.1.164/2a.txt--------------504
  结论       =的优先级比 ^~高
  
  再来测试^~同级之间的优先级

  结果
  http://192.168.1.164/2a.txt--------------504
  结论^~优先匹配的是从根开始的匹配
  
  再来看什么都不加与~的优先级比较

  结果
  http://192.168.1.164/2a.txt--------------504
  结论       不加的优先级比~低
  
  优先级排序为
  不加 <   ~/~*   <    ^~   <    =
  
  ~与*~正则匹配的优先级按先后次序来决定的
  ^~同级之间的匹配是按照根目录顺序来的

页: [1]
查看完整版本: nginx location规则优先级测试