我正在使用 AWS CDK 设置一个新的私有 S3 静态站点存储桶,并使用 CloudFront 配置为其提供服务。S3存储桶的结构如下:
bucketname/1.2.3-SNAPSHOT/
bucketname/1.2.3-SNAPSHOT/index.html
bucketname/1.2.3-SNAPSHOT/config
bucketname/1.2.3-SNAPSHOT/config/config-dev.js
bucketname/1.2.3-SNAPSHOT/config/config-tst.js
bucketname/1.2.3-SNAPSHOT/config/config-acc.js
bucketname/1.2.3-SNAPSHOT/config/config-prd.js
例如,当我部署静态站点的 4.5.6-SNAPSHOT 版本时,会在bucketname
S3 存储桶中创建一个新文件夹 4.5.6-SNAPSHOT 。目前,index.html 包含以下内容:
<html>
<head>
<script src="https://dev.somesite.com/config/config-dev.js" />
</head>
<body>...</body>
</html>
我设法配置了 cloudfront 配置以将https://dev.somesite.com/some-path映射到bucketname/1.2.3-SNAPSHOT/some-path
使用 S3 destinationPrefix
。当我导航到https://dev.somesite.com/
index.html 并加载配置 js 时。到现在为止还挺好。
但是,正如您在 HTML 中看到的,对的引用config-dev.js
仍然是硬编码的。我希望 CloudFront 配置在内部(不是 30x)将调用重定向https://dev.somesite.com/config/config.js
到bucketname/1.2.3-SNAPSHOT/config/config-dev.js
。我曾尝试设置一个RoutingRule
using 多样性KeyPrefixEquals
和ReplaceKeyWith
值,但无济于事。我正在尝试设置与此类似的配置(示例 2)。
我的 CDK 脚本产生以下路由规则:
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals>1.2.3-SNAPSHOT/config</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyWith>1.2.13-SNAPSHOT/config/config-dev.js</ReplaceKeyWith>
</Redirect>
</RoutingRule>
</RoutingRules>
但是,https://dev.somesite.com/config/anything
不会将调用重定向到所需的 config-dev.js 文件。有谁知道这个问题的最佳方法?设置 RoutingRule 是正确的方法吗?
[编辑]
我使用 S3destinationPrefix=1.2.3-SN
设置来确保将新文件夹上传到bucketName
新目标(前缀)文件夹“1.2.3-SN”中的存储桶中。同时我已经配置CloudFront的的originPath
,以/1.2.3-SN
确保该文件夹设置为“根”文件夹中。这按预期工作;导航到https://dev.somesite.com/结果bucketname/1.2.3-SN/index.html
得到服务。
我想要完成的是能够将任何对https://dev.somesite.com/config/ **.js 的调用“重新路由”到位于bucketname/1.2.3-SN/config
. 我之所以要这样做,是为了确保 index.html 中的脚本引用不需要根据环境进行更改,同时屏蔽当前环境中不需要的其他配置文件。
您可以在 CloudFront 边缘运行 Lambda 函数。它被称为lambda@edge当 CDN 收到请求(查看器请求)时,您可以设置很多东西,例如:
我相信这就是你所需要的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句