我想知道,每次部署时如何将预编译资产上传到Cloudfront
ruby-on-rails amazon-web-services ruby-on-rails-3 asset-pipeline amazon-cloudfront
我正在使用具有自定义源的CloudFront,并希望将来自Web应用程序的某些请求重定向到CloudFront(客户端使用直接URL,这些URL无法更改为基于CloudFront的URL).为了确保CloudFront上的缓存正确更新,我不得重定向来自CloudFront本身的请求.有没有办法在原始服务器上识别此类请求?
CloudFront是否会向发送到源服务器的请求添加任何自定义标头?或者是否有任何其他可靠的方法来确定请求来自CloudFront?
由于" 不允许错误的URI或跨站点访问 "问题,通过Cloudfront提供的字体在Firefox中被破坏.为了解决这个问题,我了解到我需要将"Access-Control-Allow-Origin"标头设置为通配符或源域.
我遇到的问题是,Cloudfront似乎不接受来自原点的标头.
例如,以下是我在服务器上ping字体时获得的标头列表:
curl -I -s "https://mysite.com/wp-content/themes/my-theme/includes/fonts/ProximaNova-Reg-webfont.ttf"
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 29 Jan 2014 16:03:03 GMT
Content-Type: application/x-font-ttf
Content-Length: 44992
Last-Modified: Tue, 28 Jan 2014 22:21:41 GMT
Connection: keep-alive
ETag: "52e82d75-afc0"
Expires: Thu, 29 Jan 2015 16:03:03 GMT
Cache-Control: max-age=31536000
Access-Control-Allow-Origin: https://mysite.com
Access-Control-Allow-Methods: GET
Access-Control-Max-Age: 3600
Accept-Ranges: bytes
Run Code Online (Sandbox Code Playgroud)
这种反应一切都很好看; 但是,当我为同一资源ping Cloudfront时,我得到:
curl -I -s "https://ds6dj5kp03o39.cloudfront.net/wp-content/themes/my-theme/includes/fonts/ProximaNova-Reg-webfont.ttf"
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 44992
Connection: keep-alive
Date: Wed, 29 Jan 2014 16:22:30 GMT
Server: Apache/2.2.16 …Run Code Online (Sandbox Code Playgroud) https://myapp.com -> https://abcdefgh34545.cloudfront.com -> https://myBucket.s3-eu-west-1.amazonaws.com/index.html我如何使用Prerender.io此堆栈的服务?我必须以某种方式检测WebSpider/WebRobot正在访问该页面并将其重定向到prerender.io ...
尝试从Safari 8中的CloudFront URL加载图像时出现以下错误:
Cross-origin image load denied by Cross-Origin Resource Sharing policy.
这只发生在Safari 8上.在FireFox 38和Chrome 41最新版中它加载得很好.(Mac 10.10)
1.具有以下CORS配置的S3存储桶
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)
2.链接的CloudFront分配
以下标题已列入白名单(在行为下):
Access-Control-Request-HeadersAccess-Control-Request-MethodOrigin3. JavaScript
var img = new Image();
img.crossOrigin = '';
img.onload = function() {
console.log('image loaded');
}
Run Code Online (Sandbox Code Playgroud)
1.检查curl返回的标头
图像返回正确的标题(特别是Access-Control-Allow-Origin)
> curl -sI -H 'Origin: localhost' -H 'Access-Control-Request-Method: GET' http://foo.cloudfront.com/image.jpg
...
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET
Access-Control-Max-Age: 3000
Server: AmazonS3
Vary: Origin,Access-Control-Request-Headers,Access-Control-Request-Method
X-Cache: …Run Code Online (Sandbox Code Playgroud) 我有两个S3存储桶作为我的Cloudfront原始服务器:
example-bucket-1
example-bucket-2
Run Code Online (Sandbox Code Playgroud)
两个存储桶的内容都存在于这些存储桶的根目录中.我正在尝试将我的Cloudfront分发配置为基于URL模式进行路由或重写.例如,使用这些文件
example-bucket-1/something.jpg
example-bucket-2/something-else.jpg
Run Code Online (Sandbox Code Playgroud)
我想让这些URL指向相应的文件
http://example.cloudfront.net/path1/something.jpg
http://example.cloudfront.net/path2/something-else.jpg
Run Code Online (Sandbox Code Playgroud)
我尝试设置与path1和path2模式匹配的缓存行为,但它不起作用.模式是否必须存在于S3存储桶中?
我正在开发一个通过CloudFront CDN服务器资产的Web应用程序(Angular + Rails).该应用程序通过nginx提供,该nginx已正确设置为设置"Access-Control-Allow-Origin"标头.CloudFront设置为转发标头.
问题是Angular模板的第一个响应中缺少标题,但它在后续响应中正确出现(如果我刷新页面).
例如,如果我清除Chrome中的所有历史记录和缓存并访问该页面,则模板文件的响应将不具有"Access-Control-Allow-Origin"标头.如果我刷新页面,模板的响应将具有标题.
我注意到,如果我清除所有历史记录和缓存,但不清除cookie,它会继续正常工作.
它在Firefox上的行为类似.如果我清除所有历史记录并缓存它对第一个响应不起作用,但它在后续响应中正常工作.清除所有历史记录和缓存但没有cookie后,它继续正常工作,与Chrome不同.
此外,如果我在Firefox中打开开发工具并禁用缓存,则每个响应都会丢失标头.
你知道问题可能是什么,或者我应该在下一步看看?
谢谢.
我正在使用CloudFront缓存和分发当前存储在标准存储类S3中的所有缩略图.由于CloudFront仅缓存原始数据并且每24小时访问它们,因此使用比标准更便宜的存储类是有意义的:标准不常访问(IA)或减少冗余(RR).但我不确定哪一种更合适且更具成本效益.
标准IA具有最便宜的存储(比标准类便宜58%,比RR便宜47%),但比标准和RR要贵60%.但是,在计算成本时,存储在Standard-IA类中的128kb以下的所有文件都会舍入到128kb,这适用于我的大多数缩略图.
同时,RR级的存储仅比标准级便宜20%,但其请求成本比标准IA低60%.
我不确定哪一个在实践中最具成本效益,并且会感谢任何有经验的人都能提供一些反馈.
有时dns等待600ms而不是等待另一半秒,这使得90kb文件等待超过1秒.有时pingdom等待时间甚至会显示1秒.如果我尝试另一个测试,它有时会一起到90ms.
我知道第一个请求会花费更多时间,因为cloudfront首先需要从我们的服务器获取文件.我将缓存时间设置为86400 s,这意味着它应该从缓存中获取整个24小时的文件.但是,如果我在第一次测试后仅仅2小时尝试pingdom,它将再次变得很慢.
我有一个域名example.com.我有一个名为example.comsetup 的S3存储桶,其中包含一个有效的index.html文件.现在,我想创建两个子文件夹名为old和new,每个都包含一个单页应用程序的独立版本.请求https://example.com/old(我想省略在index.html浏览器的地址栏中输入请求时)将打开子文件夹index.html中的old文件并请求https://example.com/new打开index.html.执行这些重定向的最佳方法是什么?我应该在Route 53中设置一些东西example.com/old- > example.com/old/index.html还是有更好的方法吗?
amazon-s3 amazon-web-services amazon-cloudfront amazon-route53