使用腾讯云的CLB产品,很多场景会用到http或者https监听器,使用http(s)监听器,在设置具体转发规则的时候,需要注意各个规则的优先级,避免实际转发情况与预期不符。这里对转发规则做一个补充介绍。
首先,我们可以看到官方文档https://cloud.tencent.com/document/product/214/9032的描述,URL支持使用正则表达式,并且不同的开头字符代表不同含义,个别字符不支持:
然后是关键的URL匹配顺序:
划重点:匹配规则:优先精确匹配,之后依照规则模糊匹配。后面是对这个规则的举例介绍,没什么问题。
但是呢,这里其实有个问题,文档的举例是依据"/"开头的URL来的,实际上对于正则表示的URL,优先级的规则不一样,我们来看一个栗子:
这里我们设置了两个不同的转发规则,转发到后端rs的不同端口,可以看到两个规则的正则是包含关系,带admin的正则更精确一些。
接下来我们看看实际转发情况:
从clb日志可以看到,实际请求被转发到30010端口,也就是匹配了相对不精确的那个规则,这个结果跟前边的"/"开头的转发URL的规则是不一样的。
到官网文档去找相关介绍,发现没有对这一情况的解释,于是去核实正则的转发规则优先级,最终确认到是跟nginx的Location规则一致,我们到nginx文档去搜寻一下具体的规则http://nginx.org/en/docs/http/ngx_http_core_module.html#location
可以看到正则匹配的时候,优先级是按照规则的先后顺序来的,而前面的例子中,带admin的规则是排在后面,所以优先级靠后了,这样我们的测试结果就得到了印证。