我已将云端分发设置为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节点?
答案 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)
对我而言,这是分配配置的问题。 这个问题的未来谷歌的快速清单:
config.action_controller.asset_host ='https://d1fnn4c7qqjz6e.cloudfront.net/'
在分发中,设置原始协议策略应设置为
匹配查看器
我还将查看器协议策略设置为
将HTTP重定向到HTTPS
访问控制允许来源
接入控制允许的方法
接入控制允许接头
访问控制 - 最大值 - 年龄
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/"