使用Aliyun CDN实现根据请求前缀路由

leader要求只用一个域名,根据Path前缀可以路由到不同服务,比如访问Web页面、微服务接口调用、OSS、函数计算FC都用同一个域名。

做这个路由有什么好处了?

  • 简化配置和管理,单一域名使得DNS、SSL证书和其他网络配置的管理变得相对简单和集中。所有的服务共享同一套配置,减少了配置的复杂度和管理开销。

  • 网络性能优化,通过HTTP/2或HTTP/3协议,可以在同一域名下复用连接,减少了建立多个连接的开销,从而提高了网络性能。

  • 跨域问题的简化,如果所有服务都在同一域名下,可以避免一些与跨域请求相关的问题和限制。

添加域名

1.添写好加速域名,区域按照需求来,业务类型选择小文件。

image-20231006150626960

2.配置DNS,需要把加速域名转发到CNAME域名。

image-20231006150832393

配置源站信息

image-20231006113911530

配置基础源站

选择基础源站类型,因为主要目的是使用cdn实现路由,当找不到路由时会默认路由到基础源站,建议这里直接配置公司官网的域名或者404页面。

image-20231006120620416

配置条件源站

配置规则条件

在配列表找到规则引擎进行添加,配置好规则。

image-20231006134354352

将规则和源站域名进行绑定

源站地址填写好域名。

image-20231006134711421

回源配置

回源是指通过客户端请求访问资源时,如果CDN节点上未缓存该资源,或者部署预热任务给CDN节点时,CDN节点会回源站获取资源,还可以根据业务的实际需要来配置回源相关功能。

指定源站回源HOST

选择所有源站即可

image-20231006144344433

回源协议

回源协议支持HTTPHTTPS,根据需求进行选择,一般选择跟随即可,这里是选择HTTPS

image-20231006144801692

回源url修改

image-20231006114038047

为什么需要修改回源URL?

因为需要前面使用了Path前缀作为路由,Path上有额外的参数,比如:路由到OSS新增了'\oss'的前缀,在回源时需要把'\oss'去掉,才能在oss中匹配到文件路径。
ali这边使用了PCRE正则表达式来对URL进行处理,文末有PCRE正则表达式的介绍。

待改写的Path、待改写的Path、执行规则的含义

参数

示例

说明

待改写的Path

^/hello$

以正斜线(/)开头的URL,不含http://头及域名。必须使用PCRE正则表达式。

目标Path

/hello/test

以正斜线(/)开头的URL,不含http://头及域名。支持使用PCRE正则表达式。

执行规则

如果配置了多条规则,在匹配执行当前规则后,按照从上到下顺序按依次执行可以匹配的所有规则。

break

如果配置了多条规则,若请求的URL匹配了当前规则,匹配执行完当前规则后,剩余规则将不再匹配。只修改URL中的资源路径部分,不修改URL的参数,不影响回源参数改写功能对URL中参数的改写。

1. 如果配置了多条规则,若请求的URL匹配了当前规则,匹配执行完当前规则后,剩余规则将不再匹配。 2. 只修改URL中的资源路径部分,不修改URL的参数,不影响回源参数改写功能对URL中参数的改写。

enhance break

如果配置了多条规则,若请求的URL匹配了当前规则,匹配执行完当前规则后,剩余规则将不再匹配。与break相似,但是增加了对URL中参数部分的改写能力,对URL中参数的改写可能会与回源参数改写功能对URL中参数的改写相冲突,这两个功能同时配置的时候,需要注意避免配置冲突。

1. 如果配置了多条规则,若请求的URL匹配了当前规则,匹配执行完当前规则后,剩余规则将不再匹配。 2. 与break相似,但是增加了对URL中参数部分的改写能力,对URL中参数的改写可能会与回源参数改写功能对URL中参数的改写相冲突,这两个功能同时配置的时候,需要注意避免配置冲突。

补充

PCRE正则表达式

这里以^/oss/(.*)/$1为例简单讲一下PCRE正则表达式

在PCRE正则表达式中,^/oss/(.*)/$1 可以一起用于查找和替换操作。逐一解释下这两个表达式的功能,以及它们如何配合使用。

  1. 查找表达式 ^/oss/(.\*):

    • ^:指定模式必须从目标字符串的开始处匹配。

    • /oss/:指定模式必须包含字面字符串“/oss/”。

    • (.*):捕获组,匹配“/oss/”后面的所有字符,并将它们保存为一个分组,以便稍后引用。

  2. 替换表达式 /$1:

    • /:字面字符“/”。

    • $1:反向引用,表示查找表达式中第一个捕获组的内容。

配合使用: 在一个查找和替换操作中,你可以使用查找表达式 ^/oss/(.*) 来匹配目标字符串,然后用替换表达式 /$1 来生成新的字符串。$1 将被替换为查找表达式中捕获组的内容。

例子: 假设我们有一个字符串 /oss/documents/file.txt,我们想要将 /oss 部分替换为单独的 /。我们可以使用上述的查找和替换表达式来完成这个操作:

  • 原始字符串/oss/documents/file.txt

  • 查找表达式^/oss/(.*)

  • 替换表达式/$1

  • 结果字符串/documents/file.txt

在这个例子中,查找表达式匹配了原始字符串,并捕获了 documents/file.txt。然后,替换表达式将 $1 替换为捕获组的内容,生成了新的字符串 /documents/file.txt

访问接口

访问接口必须使用POST请求,使用GET请求会缓存接口的返回信息!!!

访问接口必须使用POST请求,使用GET请求会缓存接口的返回信息!!!

访问接口必须使用POST请求,使用GET请求会缓存接口的返回信息!!!