将 AWS CloudFront CDN 放在 squarespace 网站前面需要哪些设置?

Posted

技术标签:

【中文标题】将 AWS CloudFront CDN 放在 squarespace 网站前面需要哪些设置?【英文标题】:What settings are required to put AWS CloudFront CDN in front of a squarespace website? 【发布时间】:2016-07-20 16:19:03 【问题描述】:

我无法让 AWS CloudFront 与 SquareSpace 一起使用。表单未提交和网站说网站已过期的问题。让 CloudFront 与 Squarespace 站点一起工作需要哪些设置?

【问题讨论】:

似乎 SquareSpace 已经有一个 CDN(至少对于图像/资产)。为什么要在它前面放另一个? 主要是使用 AWS 的 SSL 并将路径重定向到不同的来源,例如example.com > squarespace example.com/othersystem > 在别处托管的东西 【参考方案1】:

考虑到我刚刚设置了它,这绝对是可行的。让我分享一下我在 Cloudfront、Squarespace 和 Route53 上使用的设置以使其正常工作。如果您想使用与 AWS Route53 不同的 DNS 提供,您应该能够调整这些设置。请记住,这不是一个电子商务网站,而是一个包含博客静态页面表单的标准网站。您可以根据/如果出现其他问题调整这些说明。

云端 (CDN)


要完成这项工作,您需要为 Web 创建一个Cloudfront Distribution

原点设置

Origin Domain Name 应设置为 ext-cust.squarespace.com。这是 Squarespace 的外部域名入口点。 原始路径可以留空。 Origin ID 只是此发行版的唯一 ID,如果您在发行版创建屏幕上,它应该会自动填充,或者如果您稍后要编辑 Origin 设置,则会被修复。 Origin Custom Headers不需要设置。

默认缓存行为设置/行为

Path Patterns 应保留为 Default。 我已将查看器协议策略设置为将 HTTP 重定向到 HTTPS。这决定了您的站点是否可以使用 HTTP 或 HTTPS 中的一种或两种。我更喜欢安全路由所有流量,因此我将所有 HTTP 流量重定向到 HTTPS。请注意,您不能反向操作并将 HTTPS 重定向到 HTTP,因为这会导致身份验证问题(您的浏览器不希望暴露您认为是安全连接的内容)。 允许的 HTTP 方法需要是 GET、HEAD、OPTIONS、PUT、POST、PATCH、DELETE。这是因为表单(可能还有诸如 cmets 之类的其他东西)使用 POST HTTP 方法来工作。 缓存 HTTP 方法我只留下了 GET, HEAD。这里不需要其他任何东西。 Forward Headers 需要设置为 AllWhitelist。我们前面提到的 Squarespace 的入口点需要知道您来自哪个域来为您的网站提供服务,因此 Host 标头必须被列入白名单,或者如果设置为 All,则允许与其他所有内容一起使用。 Object CachingMinimum TTLMaximum TTLDefault TTL都可以保留默认值。李>

转发 Cookies Cookie 是使表单正常工作所缺少的组件。您可以将其设置为 AllWhitelist。 Squarespace 使用某些会话变量来进行验证、安全和其他实用程序。我在 Whitelist Cookies 中添加了以下值:JSESSIONID, SS_MID, crumb, ss_cid, ss_cpvisit, ss_cvisit, test。确保将每个值放在单独的行上,不带逗号。

Forward Query Strings 设置为 True,因为某些 Squarespace API 调用使用查询字符串,因此必须传递这些字符串。

Smooth StreamingRestrict Viewer AccessCompress Objects Automatically 都可以保留默认值,如果您知道需要,也可以根据需要进行选择它们的设置不同。

分发设置/常规

Price ClassAWS WAF Web ACL 可以不用管。 Alternate Domain Names 应列出您的域,以及附加 www 子域的域,例如example.com, www.example.com。 对于 SSL 证书,请按照教程 here 将您的证书上传到 IAM,如果您还没有,然后刷新您的证书(下拉列表旁边有一个控件) ,选择自定义 SSL 证书,然后选择您已配置的证书。这可确保浏览器将通过 HTTPS 的 SSL 识别为有效。如果您根本不使用 HTTPS,则没有必要这样做。 以下所有设置均可保留默认设置,或根据您自己的特定要求进行选择。

Route 53 (DNS)


您需要为您的域设置一个托管区域(这特定于 Route 53 设置)。 您需要设置 A 记录以指向您的 Cloudfront 分配。 您应该为指向您的 Cloudfront 分配的 www 子域名设置一个 CNAME 记录,即使您不打算使用它(稍后我们会去通过重定向 www 子域将 Squarespace 设置为仅使用根域)

广场空间


在您的 Squarespace 网站上,您只需访问Settings->Domains->Connect a Third-Party Domain。在那里,输入您的域并继续。如果您希望人们从www.example.com 访问您的站点以重定向到根目录example.com,则可以在域设置下取消选中使用 WWW 前缀。我更喜欢这个,但这取决于你。在 DNS 设置 下,您需要的唯一值是指向 verify.squarespace.com 的 CNAME。将此 CNAME 记录添加到您在 Route 53 或其他 DNS 提供商上的 DNS 设置中。它永远不会说您的连接已经完全完成,因为我们使用的是自定义部署方式,但这并不重要。

您的站点现在应该通过指向您的 Squarespace 部署的 Cloudfront 运行!请注意,DNS 传播需要时间,因此如果您无法访问该站点,请给它一些时间(最多几个小时)进行传播。

注意事项


我不能确切地说出 Whitelist Cookies 下设置的每一个值是否都是必要的,但这些值是通过使用 Chrome Inspector 确定 下存在哪些 cookie >Cookie 请求中的标头。最初我试图告诉 Cloudfront 将 Cookie 标头本身列入白名单,但它不允许这样做(可能是因为它希望您使用特定于 cookie 的白名单)。如果您的部署不起作用,请查看您的请求中是否传输了更多 cookie(在 Cookie 标头下,您要查找的值应类似于 my_cookie=somevalue;other_cookie=othervaluemy_cookieother_cookie 在我的示例中是什么您将添加到白名单中)。

同样的过程可用于通过转发标头白名单完全转发可能需要的其他标头。只需检查一下,看看是否有看起来可能需要通过的东西。

请记住,如果您没有将标头或 cookie 列入白名单,则它不会进入 Squarespace。如果您不想打扰,或者所有内容都已失效(请原谅我的语言),您始终可以设置为允许所有标头/cookie,尽管这会对缓存性能产生不利影响。所以尽量保守一点。

希望这会有所帮助!

【讨论】:

感谢分享 @JoelDuckworth 您应该将答案标记为正确答案并对其进行投票而不是发表评论 这让我摆脱了公关链接的噩梦,感谢 Psiloc! 有时我从 CloudFront 收到 504 错误,您有线索吗? 这非常适合确保我们的 squarespace 网站安全。谢谢 Psiloc【参考方案2】:

以下是让 CloudFront 与 Squarespace 一起使用的设置!

行为:

允许的 HTTP 方法 确保您选择:GET、HEAD、OPTIONS、PUT、POST、PATCH、DELETE。否则表格将不起作用: 转发标头:选择白名单并选择“主机”。否则 squarespace 将不知道他们需要加载哪个网站,并且您会收到“网站已过期”或类似消息。

起源:

源域名设置为:ext-cust.squarespace.com

源协议策略选择 HTTPS,这样 CDN 和源之间的流量也很安全

一般

备用域名 (CNAME) 将您的 www 和无 www 地址都放在这里,让 Squarespace 决定是否将 www 定向到 root 或反之亦然(例如 example.com www .example.com) 您现在可以在 CloudFront 上配置 SSL

HTTPS您现在可以在此处而不是在 Squarespace 中使用您网站的证书来强制执行 HTTPS


设置我仍然不确定:

转发查询字符串:建议不要出于缓存原因,但我认为这可能会破坏...


Route53

为 www 和 root 创建 A 记录(例如 example.com www.example.com)并设置为您的 CloudFront 分配的别名

【讨论】:

您需要转发查询字符串,如果 (a) 您的应用程序实际使用它们,或者 (b) 如果您希望能够在 CloudFront 和浏览器中用于缓存清除。如果您不转发它们,CloudFront 会假装它们从未到达,因此您只能将它们用于浏览器端缓存清除。

以上是关于将 AWS CloudFront CDN 放在 squarespace 网站前面需要哪些设置?的主要内容,如果未能解决你的问题,请参考以下文章

关于使用AWS的CDN-CloudFront的费用计算及说明

AWS CloudFront 分布在与 Web 服务器相同的域下

AWS CSAA -- 04 AWS Object Storage and CDN - S3 Glacier and CloudFront

AWS Cloudfront 作为具有自定义域的 Heroku 站点的 CDN

AWS CSAA -- 04 AWS Object Storage and CDN - S3 Glacier and CloudFront

将 AWS cloudfront 放在 ec2 前面会引发 502 错误