我想在亚马逊的服务器上发布一个网站:
我是否需要亚马逊的EC2用于网站,RDS用于MySQL数据库,CloudFront用于FMS?我真的很喜欢我应该使用哪些服务的演练.
谢谢.
我找到了将我的域名CNAME指向亚马逊的CloudFront服务的说明,但理想情况下我想指出根名称(记录名称).例如,foo.com而不是www.foo.com.这可能吗?
我正在努力让CORS与Amazon S3 + CloudFront一起正常运行.
设置我的CORS配置后,它似乎正常工作:
$ curl -H "Origin: https://app.close.io" -I "https://d4389n07pf8cq.cloudfront.net/built/app.9e1f9ee9.js" -s | grep Access
Access-Control-Allow-Origin: https://app.close.io
Access-Control-Allow-Methods: GET, HEAD
Access-Control-Max-Age: 3000
Access-Control-Allow-Credentials: true
Run Code Online (Sandbox Code Playgroud)
但是当请求资源时,Accept-Encoding: gzipCORS头文件没有正确返回.
$ curl -H "Origin: https://app.close.io" -H "Accept-Encoding: gzip" -I "https://d4389n07pf8cq.cloudfront.net/built/app.9e1f9ee9.js" -s | grep Access
(nothing)
Run Code Online (Sandbox Code Playgroud)
这是为什么?
我的CORS配置如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>https://app.close.io</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
<AllowedHeader>Content-*</AllowedHeader>
<AllowedHeader>Host</AllowedHeader>
<AllowedHeader>Accept-Encoding</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)
(我还尝试了Accent-Encoding删除标头的CORS配置.)
的S3对象本身gzip压缩,且具有的"元数据" Content-Encoding: gzip,Cache-Control: public, max-age=31536000和Content-Type: application/javascript.
我不明白为什么CloudFront + S3 CORS在请求gzip时无法正常工作.
amazon-s3 cross-domain amazon-web-services cors amazon-cloudfront
我在gtmetrix.com上获得以下内容:
Leverage browser caching
E (55)
52%
Server High
What does this mean?
The following cacheable resources have a short freshness lifetime. Specify an expiration at least one week in the future for the following resources:
http://mysite.s3.amazonaws.com/profile.png (expiration not specified)
http://mysite.s3.amazonaws.com/circle.player.css (expiration not specified)
http://mysite.s3.amazonaws.com/main.js (expiration not specified)
http://mysite.s3.amazonaws.com/not.the.skin.css (expiration not specified)
http://cdn-images.mailchimp.com/embedcode/slim-321711.css (expiration not specified)
Run Code Online (Sandbox Code Playgroud)
我猜测mailchimp文件无法修改.但是,如何为Amazon S3 Cloudfront文件指定浏览器缓存?
我正在使用支持CORS的Cloudfront背后的S3存储桶.如果客户端使用Origin标头发出请求,则S3(和cloudfront)使用"Vary:Origin"标头进行响应,但是如果请求是在没有Origin标头的情况下生成的,则响应不包含任何Vary标头.
这是有问题的,因为我在img标签中使用来自cloudfront/s3的资源,在这种情况下,浏览器发出没有Origin标头的请求,然后稍后对所述图像发出ajax请求.然后,浏览器使用图像的缓存版本,而不使用Access-Control-Allow-Origin标头,因此拒绝该请求.
有没有办法让S3始终返回"Vary:Origin"标题?
我正在尝试使用ansible来提供Route53故障转移(虽然我使用ansible的事实并不是特别相关).
我有这个任务有效:
- name: Route 53 Failover | Add ALIAS
route53:
command: create
zone: "{{ top_level_domain }}"
record: "{{ cname_record_domain }}"
type: A
alias: true
alias_hosted_zone_id: "Z2FDTNDATAQYW2"
value: "{{ cname_target_domain }}"
wait: yes
failover: SECONDARY
identifier: "{{ cname_record_identifier }}"
overwrite: true
Run Code Online (Sandbox Code Playgroud)
硬编码alias_hosted_zone_id是我的云端分发的托管区域.找到这个(我知道)的唯一方法是在Route53控制台的"添加记录集"对话框中选择cloudfront分发作为别名.然后它在对话框中声明托管区域.
我想要做的是用从aws cli命令或ansible任务填充的变量替换硬编码字符串.这可能吗?
我们在尝试使用客户端路由器(反应路由器)使用 SPA 时遇到问题。我们正在使用 has a 的概念DOMAIN -> CDN (CloudFront) -> S3来为我们的静态文件提供服务。
我们已经配置了 S3 来提供静态文件。CDN 被配置为具有来自 S3 的源,我们已经配置了自定义错误页面来捕获错误:
使用此配置,我们可以捕获如下错误:
https://www.example.com/custom-url
Run Code Online (Sandbox Code Playgroud)
CDN 会将所有 404/403 错误重定向到主服务器index.html,react router并获得正确的路由。
我们有我们的网站,并且客户端路由器工作正常,但是我们的 CDN 响应有问题x-cache: Error from cloudfront:
如果我们在https://www.example.com没有任何查询参数(不是查询字符串)的情况下访问主 url ,一切正常。
我该如何解决这个问题并使我的所有动态 URL 都能正常工作?
谢谢。
当我将 React Router 应用程序部署到 AWS S3 和 CloudFront 时,并且当我尝试直接访问 React 路由时,它会出现以下错误,并显示 403 错误代码。当它流经应用程序时,我可以访问基本 URL ( www.sample-app.com ) 和路由 URL ( www.sample-app.com/cart )。
但是如果我尝试直接进入 React 路由(www.sample-app.com/cart),它会产生 403 Access Denied 错误,如下所示。主要的痛点是当我尝试刷新 React 路由 URL 时它会产生此错误。
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>REQUEST_ID</RequestId>
<HostId>HOST_ID</HostId>
</Error>
Run Code Online (Sandbox Code Playgroud)
注意:我使用 AWS 负载均衡器和 Lambda 函数作为后端。我已设置 AWS ALB 和 Cloudfront 以使用 AWS Cognito 对用户进行身份验证。
感谢您对此的帮助。
amazon-s3 amazon-cloudfront reactjs react-router aws-application-load-balancer
有没有办法更新存储在Amazon CloudFront(亚马逊的CDN服务)上的文件?似乎它不会对我们制作的文件进行任何更新(例如删除文件并使用与以前相同的文件名存储新文件).我是否必须明确触发更新过程以从边缘服务器中删除文件以获取已发布的新文件内容?
谢谢你的帮助
我想让我的客户直接与ElasticSearch REST API对话,显然阻止他们执行任何数据或配置更改.
我看了一下ElasticSearch REST接口,我注意到了这种模式:HTTP GET请求非常安全(无害查询和集群状态).
所以我认为我可以将Cloudfront用作仅允许GET/HEAD方法的CDN /代理(您可以将其限制在主配置中).
到目前为止一切都很好,一切都已成立.但事情不起作用,因为我需要向全世界开放我的EC2安全组才能从Cloudfront访问!我真不想要这个!
当我将EC2与RDS一起使用时,我可以简单地允许访问RDS安全组中的EC2安全组.为什么我不能使用CloudFront执行此操作?或者我可以吗?
想法?
编辑:它没有记录,但ES接受facets查询,它涉及(JSON)主体,不仅使用POST,还使用GET.这通过不忽略GET请求(源)的主体来简单地破坏HTTP建议(对于RFC3616 ).这是因为,正如所指出的那样,直接暴露ES REST接口可能导致使用复杂查询的轻松DOS攻击.我仍然相信,少一个代理仍然值得.
编辑:我另一个选项是跳过CloudFront的并增加了安全层作为ElasticSearch插件,如图点击这里
rest http amazon-web-services elasticsearch amazon-cloudfront
amazon-s3 ×6
cors ×2
react-router ×2
amazon ×1
amazon-ec2 ×1
amazon-rds ×1
aws-application-load-balancer ×1
cdn ×1
cloud ×1
cross-domain ×1
dns ×1
http ×1
reactjs ×1
rest ×1
static-site ×1