CloudFront 自定义 object 缓存不起作用

CloudFront customize object caching does not work

我已经使用自定义来源(无 S3)设置了 CloudFront。自定义来源正在使用 cachecontorl headers:

提供文件
 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 as Cache-Control: max-age=30672000 但是这个是不是变了?我在这里错过了什么?

更新:我读到:

You can use these options in many interesting ways! For example, if you don’t set any cache control header on your origin, you can use the Default TTL to specify the cache duration for the edge locations. Or, you can completely override the cache-control header set by origin by setting all three of the values (Min, Max, and Default) to the same value.

但是我的出身一直没有被检查?

您在 CloudFront 配置中定义的 TTL 对 CloudFront 来说是本地的,以了解您想在 CloudFront 上缓存多长时间,但这并不意味着 CloudFront 将添加 cache-control header . CloudFront 不添加 cache-control header,但如果 header 是由源设置的,它会尊重 header。

CloudFront Cache Control

link 上方有一个 table,它将为您提供有关 CloudFront 在 origin 具有 cache-control header 设置以及最小值、最大值、默认值时的行为方式的信息已设置 TTL。

cache-control header 应由 Origin 或使用 Lambda@edge 添加