Heroku Cloudfront和CSS/JS资产
我已经设置了cloudfront发行版,可以访问myapp.herokuapp.com 也许我一般误解了Cloudfront和CDN,但我认为CDN托管了静态文件,而不是我,只是在Heroku上存储的HTML文件中包含对CDN URL的引用。我在Chrome网络选项卡中看到的是: 请求URL: 请求方法:获取状态代码:301永久移动 然后: 请求URL: 请求方式:获取状态代码:304未修改Heroku Cloudfront和CSS/JS资产,heroku,cdn,amazon-cloudfront,Heroku,Cdn,Amazon Cloudfront,我已经设置了cloudfront发行版,可以访问myapp.herokuapp.com 也许我一般误解了Cloudfront和CDN,但我认为CDN托管了静态文件,而不是我,只是在Heroku上存储的HTML文件中包含对CDN URL的引用。我在Chrome网络选项卡中看到的是: 请求URL: 请求方法:获取状态代码:301永久移动 然后: 请求URL: 请求方式:获取状态代码:304未修改 有没有另一种方法来设置Cloudfront,使对这些静态文件的请求根本不会击中我的Heroku节点?你看
有没有另一种方法来设置Cloudfront,使对这些静态文件的请求根本不会击中我的Heroku节点?你看过这篇文章吗?它非常详细地介绍了这个主题 但听起来你并没有误解
如果你看到的是检查员,你不应该看到请求进入你的herokuapp。假设您已将所有资产配置为从cloudfront URL加载,那么当从该URL请求资产时(如果cloudfront尚未缓存该资产),cloudfront将从您的herokuapp中获取该资产,然后将其返回,但您不会在浏览器检查器中看到这一点。下一次请求相同资产时,它将从cloudfront获得服务。我遇到了与cookiemonster相同的问题。我能够让Cloudfront使用asset_sync gem,但不是根据Heroku的文章 我正试图从asset_sync切换,因为(1)它增加了复杂性,(2)Heroku不再推荐它 从我下面的回复中,您可以看到Amazon为每个呼叫发出301重定向 以下是登台服务器的一些详细信息: 我的整个网站都是https
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
My 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
这发生在我安装SSL时。为了修复它,我删除了cloudfront上的通讯组,创建了一个新的通讯组,并使用新的cloudfront子域再次滚动应用程序。一旦我这么做了,它就不再在我的应用程序中添加301了。这很奇怪,但是在cloudfront url中添加了一个“/”为我修复了这个问题:
config.action\u controller.asset\u host=”https://d2gfgnx4lxlciz.cloudfront.net/“
对我来说,这是一个分发配置的问题。
为未来的谷歌搜索者提供一份关于这个问题的快速清单:
这里也有同样的问题。我能够让它与asset_sync gem一起工作,但由于Heroku不再推荐它,我尝试使用这种方法。我也得到301重定向。有什么办法吗?没有,还没想好,也许我会开始悬赏。太好了。我还联系了Heroku的支持部门,他们通常反应很好。真的很奇怪。你的url看起来像:别问我为什么,但它是有效的。忘了提一下,我没有使用S3存储桶,我让我的Heroku应用程序提供第一个实例,CloudFront从那里缓存它,就像Heroku建议Sturns我们的301是用来缓存一个301的。我们的站点仅使用SSL,最初我们将“源协议策略”设置为“HTTP”,而不是“匹配视图”。当CloudFront第一次访问heroku站点时,应用程序重定向到HTTPS,HTTPS创建缓存301。在CloudFront控制台中将“原始协议策略”设置为“匹配视图”,并在application.rb文件中更新资产版本才是真正的解决方案。
config.action\u controller.asset\u host
不应包含http | | https
前缀,它将自动追加。我还建议在您的环境变量中设置它,以便于修改。