我已经使用自定义源(无 S3)设置了 CloudFront。自定义源提供带有 cachecontorl 标头的文件:
curl -I https://origin-site/assets/common.css?v=12345
HTTP/1.1 200 OK
Cache-Control: max-age=86400
我已将 CloudFront 配置为自定义 MinTTL、DefaultTTL 和 MaxTTL。
在 CloudFormation 中:
CacheBehaviors:
- TargetOriginId: !Sub 'xxx-${Environment}'
PathPattern: "assets/*"
ViewerProtocolPolicy: redirect-to-https
Compress: true
MinTTL: 0
DefaultTTL: 30672000
MaxTTL: 30672000
AllowedMethods:
- HEAD
- GET
- OPTIONS
CachedMethods:
- HEAD
- GET
- OPTIONS
ForwardedValues:
QueryString: true
Cookies:
Forward: none
现在我在控制台中看到自定义设置和正确的值。我什至在它之后做了一个失效。
现在我通过 CDN 访问资产:
curl -I https://cdn-cloudfront-site/assets/common.css?v=12345
HTTP/1.1 200 Connection Established
Proxy-Agent: IWSS
Date: Mon, 18 Nov 2019 13:05:29 GMT
HTTP/1.1 200 OK
Content-Type: text/css
Content-Length: 104120
Connection: keep-alive
Cache-Control: max-age=86400
Last-Modified: Fri, 15 Nov 2019 10:15:38 GMT
Accept-Ranges: bytes
ETag: "0415ea09d9bd51:0"
Server: Microsoft-IIS/10.0
X-Content-Type-Options: nosniff
Access-Control-Allow-Origin: *
Date: Mon, 18 Nov 2019 13:05:30 GMT
Vary: Accept-Encoding
X-Cache: Miss from cloudfront
Via: 1.1 b912dc97777020eb19579888add26978.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: FRA50-C1
X-Amz-Cf-Id: 46wPzKf7v7A2vTbWQMRVZf2V8KCPdCtZSCdY9P82MtDLKJXe3TxskQ==
先是失误,然后是命中,没关系。但是我想要Cache-Control: max-age=86400
asCache-Control: max-age=30672000
但是这不是改变了吗?我在这里缺少什么?
更新:我读到:
您可以通过许多有趣的方式使用这些选项!例如,如果您未在源上设置任何缓存控制标头,则可以使用默认 TTL 指定边缘站点的缓存持续时间。或者,您可以通过将所有三个值(最小值、最大值和默认值)设置为相同的值来完全覆盖由原点设置的缓存控制标头。
但是我的原点一直没有被检查?
您在 CloudFront 配置中定义的 TTL 是 CloudFront 本地的,以了解您希望在 CloudFront 上缓存多长时间,但这并不意味着 CloudFront 将添加缓存控制标头。CloudFront 不添加缓存控制标头,但如果标头是由源设置的,它会遵守标头。
上面的链接有一个表格,如果源设置了缓存控制标头,并且设置了最小、最大、默认 TTL,则该表格将为您提供有关 CloudFront 行为的信息。
缓存控制标头应由 Origin 添加或使用 Lambda@edge
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句