Cloudfront和CSS / JS资产

时间:2014-02-08 12:06:59

标签: heroku cdn amazon-cloudfront

我已将云端分发设置为myapp.herokuapp.com

也许我一般误解了Cloudfront和CDN,但我认为CDN托管静态文件而不是我只是在我的Heroku上存储的HTML文件中包含对CDN URL的引用。我在Chrome网络标签中看到的是:

  

请求网址:http://blah123.cloudfront.net/css/style-123.css

     

请求方法:GET状态代码:301永久移动

然后:

  

请求网址:http://myapp.herokuapp.com/css/style-123.css

     

请求方法:GET状态代码:304未修改

是否有另一种设置Cloudfront的方法,以便这些静态文件的请求根本不会到达我的Heroku节点?

5 个答案:

答案 0 :(得分:2)

您是否看过这篇文章https://devcenter.heroku.com/articles/using-amazon-cloudfront-cdn - 它涵盖了很多细节。

但这听起来并不像你误解了。

如果您正在查看检查员,您当然不应该看到请求发送到您的herokuapp。假设您已经配置了要从您的云端URL加载的所有资产,那么当从该URL请求资产时(如果尚未通过cloudfront缓存该资产),cloudfront将从您的herokuapp中获取资产然后将其提供回来,但您不会在浏览器检查器中看到这一点。下次请求同一资产时,它将从cloudfront提供。

答案 1 :(得分:2)

我和cookiemonster有同样的问题。我能够使用asset_sync gem https://github.com/rumblelabs/asset_sync来使用Cloudfront,但不能使用Heroku的文章https://devcenter.heroku.com/articles/using-amazon-cloudfront-cdn

我正在尝试从asset_sync切换,因为(1)它增加了复杂性,(2)Heroku不再推荐它。

根据我在下面的回复,您可以看到亚马逊为每次通话发出301重定向。

以下是登台服务器的一些详细信息:

我的整个网站都是https

我的staging.rb

config.action_controller.asset_host = "https://d2gfgnx4lxlciz.cloudfront.net"

<强>的Cloudfront

我使用了通用配置,只更改了原点:

Domain Name: d2gfgnx4lxlciz.cloudfront.net
Origin: sohelpfulme-staging.herokuapp.com
Delivery Method: Web
CNAMEs: none

HTTP标头

Request URL:https://d2gfgnx4lxlciz.cloudfront.net/assets/jquery-20129d378db54e4ede9edeafab4be2ff.js
Request Method:GET
Status Code:301 Moved Permanently
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,zh-CN;q=0.6,zh-TW;q=0.4
Cache-Control:no-cache
Connection:keep-alive
Cookie:optimizelyEndUserId=oeu1387769272844r0.715743659529835; optimizelySegments=%7B%7D; optimizelyBuckets=%7B%7D
Host:d2gfgnx4lxlciz.cloudfront.net
Pragma:no-cache
Referer:https://sohelpfulme-staging.herokuapp.com/testuser
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36
Response Headersview source
Age:32
Connection:keep-alive
Content-Type:text/html
Date:Mon, 17 Feb 2014 22:43:36 GMT
Location:https://sohelpfulme-staging.herokuapp.com/assets/jquery-20129d378db54e4ede9edeafab4be2ff.js
Status:301 Moved Permanently
Strict-Transport-Security:max-age=31536000
Transfer-Encoding:chunked
Via:1.1 16fab6bd7655623b4e7dcaf090973fc8.cloudfront.net (CloudFront)
X-Amz-Cf-Id:oiKeV-b3OrhbtkjXrMtyNI9EMvydfdnZ8Drp2fxojNHiveqBNsttJA==
X-Cache:Hit from cloudfront
X-Rack-Cache:miss

答案 2 :(得分:2)

对我而言,这是分配配置的问题。 这个问题的未来谷歌的快速清单:

  1. HTTPS网站:如果您的网站仅为https,请确保您在rails config中包含协议
  2.   

    config.action_controller.asset_host ='https://d1fnn4c7qqjz6e.cloudfront.net/'

    在分发中,设置原始协议策略应设置为

      

    匹配查看器

    我还将查看器协议策略设置为

      

    将HTTP重定向到HTTPS

    1. 如果您提供字体,您还需要选择转发标题的白名单并包含这些标题
    2.   

      访问控制允许来源

           

      接入控制允许的方法

           

      接入控制允许接头

           

      访问控制 - 最大值 - 年龄

      1. 对于firefox ,请确保将“允许的HTTP方法”设置为
      2.   

        GET,HEAD,OPTIONS,PUT,POST,PATCH,DELETE

        您可以使用

        检查文件
          

        curl -I https://d1fnn4c7qqjz6e.cloudfront.net/assets/rails_admin/logo-5cf7f2f8b1177213b00e5ec63a032856.png//

答案 3 :(得分:1)

当我设置SSL时,这发生在我身上。为了解决这个问题,我删除了cloudfront上的通讯组并创建了一个新的通讯组,并使用新的cloudfront子域再次滚动了应用程序。一旦我这样做,它就不再回复我的应用程序了。

答案 4 :(得分:0)

这很奇怪但附加了&#39; /&#39;到云端网址为我修复了这个问题:

config.action_controller.asset_host = "https://d2gfgnx4lxlciz.cloudfront.net/"