在不破坏URL的情况下将ember-cli应用程序部署到S3

时间:2015-01-09 14:12:12

标签: url ember.js amazon-s3 ember-cli

我正在研究我在S3中部署的ember-cli应用程序。我真的希望能够使用这种“无服务器”方法,因为它配置起来非常简单,而且非常实惠。

我的网址存在问题。如果我点击http://my-bucket.s3-website-us-east-1.amazonaws.com/它就可以了。但是如果我尝试直接加载除应用程序根目录之外的页面,例如http://my-bucket.s3-website-us-east-1.amazonaws.com/elephants/5,那么它会给出403,因为S3中没有这样的资源。 (我可以通过应用程序很好地导航到这些页面,我可以在我的机器上以开发模式直接命中它们,因此ember应用程序工作正常。)

在寻找解决方案时,我找到suggestions#!添加到我的路径中。这似乎更好,因为它不返回403,但是当我点击http://my-bucket.s3-website-us-east-1.amazonaws.com/#!/elephants/5时,它只是重定向到http://my-bucket.s3-website-us-east-1.amazonaws.com,丢失了路径所包含的任何特定信息。

我有什么选择?有没有办法使用S3并有工作的URL?我需要服务器吗?还是有另一种方法让我望而却步?

3 个答案:

答案 0 :(得分:6)

只有基于#的重定向方法几乎没有问题。我在下面列出了它们:

  1. 当应用程序的路径得到解决时,会发生多重重定向。例如:www.myapp.com/path/for/test被重定向为www.myapp.com /#/ path / for / test
  2. 网址栏中有一个闪烁,因为“#”来自于SPA框架的操作。
  3. seo受到影响,因为 - '嘿!它谷歌强迫他的手重定向'
  4. Safari对您的应用程序的支持可供选择。
  5. Ember-CLI-Deploy倡导的Lightening部署方法突变的方法如下:

    1. 确保为您的网站配置了索引路由。主要是index.html
    2. 从S3配置中删除路由规则
    3. 将Cloudfront放在S3存储桶前面。
    4. 配置Cloudfront实例的错误页面规则。在错误规则中指定:
      • Http错误代码:404(以及403或其他需要的错误)
      • 错误缓存最小TTL(秒):0
      • 自定义回复:是
      • 响应页面路径:/index.html
      • HTTP响应代码:200
    5. 5.对于SEO需求+确保您的index.html没有缓存,请执行以下操作:

      • 配置EC2实例并设置nginx服务器。
      • 将公共IP分配给您的EC2实例。
      • 创建一个ELB,其中包含您作为实例创建的EC2实例
      • 您应该能够将ELB分配给您的DNS。
      • 现在,配置您的nginx服务器以执行以下操作:Proxy_pass对您的CDN的所有请求(仅限index.html,直接从您的云端服务其他资产)和搜索机器人,按照Prerender等服务的规定重定向流量。 IO

      我可以提供有关nginx设置的更多详细信息,只需留言即可。已经很难学会了。

      云端分发更新后。使您的云端缓存无效一次,使其处于原始模式。 点击浏览器中的网址,一切都很好。

答案 1 :(得分:4)

好的,我很亲密。事实证明,正确的方法是:

http://my-bucket.s3-website-us-east-1.amazonaws.com/#/elephants/5

我曾尝试过各种方法,但其中没有一种方法恰好是#而没有!,并被/包围。相关阅读是关于location

的文档

值得注意的是我正在使用:

App.Router.reopen({
  location: 'auto'
});

此外,我在静态网站托管下使用以下RoutingRules

<RoutingRules>
    <RoutingRule>
        <Condition>
            <HttpErrorCodeReturnedEquals>403</HttpErrorCodeReturnedEquals>
        </Condition>
        <Redirect>
            <HostName>my-bucket.s3-website-us-east-1.amazonaws.com</HostName>
            <ReplaceKeyPrefixWith>#/</ReplaceKeyPrefixWith>
        </Redirect>
    </RoutingRule>
</RoutingRules>

答案 2 :(得分:2)

只需将错误文档映射到index.html&amp;您的locationType应设置为auto。 http://i.stack.imgur.com/qbAov.png