如何为整个网站设置CDN,而不仅仅是静态资源?

问题描述 投票:0回答:1

我有一个复杂的问题。是否可以通过 CDN 提供整个静态网站(不仅仅是 css、js、图像……还包括渲染的 HTML 视图)。无论我尝试哪个 CDN 提供商,我都无法让它工作,因为这就是 DNS 和 nginx 设置发挥作用的地方。让我们使用 Amazon Cloudfront 来描述这一点。

  1. 我已经为自定义源配置了cloudfront,比如说example.com
  2. example.com 托管在与亚马逊不同的提供商上,并通过 nginx 提供内容
  3. DNS 提供商是亚马逊,所以我可以为 cloudfront 分发创建记录别名
  4. 我已将 nginx 配置为仅允许 https 和非 www 版本的网站,这意味着我将 http://example.com 重定向到 https://example.comhttp://www.example。 comhttps://example.comhttps://www.example.comhttps://example.com
  5. 我的 DNS 记录如下所示:
    • www 记录指向该远程服务器的 IP
    • 根域 (@) 的记录通过别名指向 xxxxxxx.cloudfront.net 格式的 cloudfront url

问题来了:

  • 我的网站可以通过 xxxxxxx.cloudfront.net 完全访问:这意味着我尝试的任何有效路径(例如 xxxxxxx.cloudfront.net/en/blog)都会返回正确的内容。
  • 但是我的 DNS 根记录(xxxxxxx.cloudfront.net 的别名)不起作用,因为如果访问者尝试访问 example.com(这会将他在后台指向 xxxxxxx.cloudfront.net 上的 CDN 缓存端点),亚马逊会尝试访问 example.com 收集响应并缓存它,但亚马逊不知道去哪里,因为根 A 记录不指向该远程服务器的 IP 地址,而是指向亚马逊 CDN,这会导致错误 403。

所以我的问题是:

是否可以在该远程服务器上配置 nginx 以某种方式返回内容,当请求来自亚马逊(缓存它)时以及当请求不是来自亚马逊(某些访问者)时,然后将他指向 CDN(xxxxxxx.cdn)。 cloudfront.net)?此规则必须有效,因为相反,如果访问者来到域(例如 example.com/en/blog)并且亚马逊没有对此请求的缓存响应,它将把他指向远程服务器,远程服务器将处理该请求,返回亚马逊将缓存的响应,下次访问者访问同一路径时,亚马逊现在不需要调用远程服务器,他只需返回兑现的响应,直到过期。

但我不知道如何正确设置 Route 53 中的 nginx 和 DNS 以这种方式工作。

nginx amazon-cloudfront cdn amazon-route53
1个回答
0
投票

通过添加第三个源来解决 - 例如 production.example.com,其中 amazon cloudfront 将连接到根域,并且 www 域也会连接到 cloudfront。 必须修复原始 Production.example.com 的 URL 生成,以返回 https://example.com/* 而不是 https://product.example.com/* 或使用资源和 hreflinks 的相对路径

© www.soinside.com 2019 - 2024. All rights reserved.