我们有一个由 Elastic Beanstalk (AWS) 提供服务的网站,一切都运行良好。我们使用内置负载均衡器通过 HTTPS 等方式为网站提供服务。我们的数据库通过 RDS 服务分开,而不是与我们的 Web 服务器位于同一个 EC2 实例上。到目前为止,我们对设置感到满意。
现在,我们想在我们网站的域名(出于 SEO 原因,不是单独域名或子域名)下的“/blog”下建立一个 WordPress 博客。我们的网站是一个定制的 PHP 应用程序(使用 Laravel 框架),我宁愿不从同一个地方托管 WP 应用程序和我们的网站。
我相信我们可以使用 CloudFront(亚马逊的 CDN)来仅为我们网站的 /blog 部分提供服务,并将这些请求路由到安装在不同 EC2 实例上的单独 WP。我曾使用 CloudFront 来做常规 CDN 类型的事情(静态资产),但我对如何设置这种特定类型的配置有点迷茫。
首先,这个想法是不是太疯狂了,还是听起来还不错?其次,如果这个想法合理,我需要知道哪些事情才能实现它?
答案1
是的,如果您将整个网站设置为在 CloudFront 后面运行,则可以。然后,您可以为网站配置默认的后端源服务,并开辟一个例外,以便为 /blog 采用不同的路径。
配置新的 CloudFront 分发。使用主站点的 ELB 或 EB 主机名作为源。将站点的域名配置为 CloudFront 中的备用域名。
接下来,添加第二个源,目标是可以到达 WP 部署的主机名。创建一个行为路径模式匹配/blog*
并使用第二个原点。
(如果 /blog* 与网站根目录中的任何其他内容匹配……不太可能,但假设根目录中有另一个名为 /blogosphere 的页面,则会错误匹配,因此您实际上需要创建两个模式,/blog 和 /blog/*)。
陷阱:请注意,创建起源时,有一个框原始路径。 这可能不会达到您的预期。如果不确定,请留空。
源路径是您希望 Cloudfront 添加到其发送到源的请求中的前缀,即使它在 URL 中不可见。因此,如果您将其设置为 /test,并且来自浏览器的请求是针对 /blog,则后端服务器将看到针对 /test/blog 的请求到达。
源路径允许您将要请求的路径添加到前面,否则传入路径将按从浏览器接收的方式发送。这意味着在您的 WP 安装上,/blog
当您直接连接到 WP 服务器时,内容的根目录需要位于 ,而不是/
。CloudFront 目前不提供任何从路径中删除组件的机制。
还要记住,在 WordPress 正常运行所需的范围内,启用查询字符串和 Cookie 转发到 WordPress 后端。当然,您的主网站也应如此。
您可能需要白名单如果您的服务器需要,则为标Host:
头。可能还有其他标头,具体取决于服务器需要查看哪些标头,但一般来说,转发的标头越多,CloudFront 可以执行的缓存就越少,因为如果它将标头转发到源,它必须假定该标头发生变化的任何后续请求都可能从服务器收到不同的响应,因此除非所有转发的标头都匹配,否则无法从缓存中提供请求。
最后,经过配置和测试后,您将主机名指向 CloudFront 端点,然后就可以上线了。