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