我在Android应用程序中使用AmazonS3Client,使用getObject请求从我的Amazon S3存储桶下载图像.
目前,我得到了这个例外:
com.amazonaws.services.s3.model.AmazonS3Exception:
The specified key does not exist.
(Service: Amazon S3; Status Code: 404; Error Code: NoSuchKey;
Run Code Online (Sandbox Code Playgroud)
即使我能够在S3存储桶中看到具有指定键的对象.
我正在尝试设置CloudFront为我的S3存储桶中托管的静态文件.我有设置分发,但我AccessDenied在尝试浏览/CSS/stlyle.cssS3存储桶中的CSS()文件时得到:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>E193C9CDF4319589</RequestId>
<HostId>
xbU85maj87/jukYihXnADjXoa4j2AMLFx7t08vtWZ9SRVmU1Ijq6ry2RDAh4G1IGPIeZG9IbFZg=
</HostId>
</Error>
Run Code Online (Sandbox Code Playgroud)
我已将我的CloudFront分配设置为我的S3存储桶并创建了新的Origin Access Identity policy自动添加到S3存储桶:
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E21XQ8NAGWMBQQ"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::myhost.com.cdn/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我希望通过CloudFront提供此S3存储桶中的所有文件...
*更新*
这个云前端指南说:
默认情况下,您的Amazon S3存储桶及其中的所有对象都是私有的 - 只有创建存储桶的AWS账户才有权读取或写入其中的对象.如果要允许任何人使用CloudFront URL访问Amazon S3存储桶中的对象,则必须授予对象的公共读取权限.(这是使用CloudFront和Amazon S3时最常见的错误之一.您必须明确授予Amazon S3存储桶中每个对象的权限.)
所以基于此我已经为S3 bucket中的所有对象添加了新的权限Everyone Read/Download.现在我可以访问文件了.
但现在当我访问这样的文件https://d3u61axijg36on.cloudfront.net/css/style.css被重定向到S3 URI和HTTP.如何禁用此功能?
我们在尝试使用客户端路由器(反应路由器)使用 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
我有如下自定义路线:
// @flow
import React, { PureComponent } from 'react';
import { Switch, Redirect } from 'react-router-dom';
import { withRouter } from 'react-router';
import { Route } from 'components/Routes';
import Story from 'pages/Story';
import Page404 from 'pages/404';
class Routes extends PureComponent<{}> {
render() {
return (
<Switch>
<Route exact path="/" render={props => <Story {...props} />} />
<Route
exact
path="/chapter/:id"
render={props => <Story {...props} />}
/>
<Route path="/404" render={props => <Page404 {...props} />} />
<Redirect to="/404" /* Must be the last …Run Code Online (Sandbox Code Playgroud) 因此,我有一个 AWS S3 存储桶,用于托管我构建的 React 应用程序的文件。我使用 CodePipeline 构建和编译 React 应用程序,并将文件存储在通过 CloudFront CDN 提供服务的 S3 存储桶上。
当我从 root 访问 url 时,一切似乎都工作正常https://website.com。当我单击该页面上的“登录”时,我会被引导至以下路线https://website.com/auth/login,效果非常棒。
问题
如果我尝试直接访问该页面,https://website.com/auth/login则会收到以下错误:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>66CE67E2E5DA0B7B</RequestId>
<HostId>Spfhgnlygx05eugycEy5ew4e8oSn/ccNX21Iy/6qaAxI8glXljDjgKmUPvMzRd8+NktQsNietpg=</HostId>
</Error>
Run Code Online (Sandbox Code Playgroud)
我将 cloudfront CDN 中的默认资源设置为,这/index.html就是根域工作的原因,但是如何获取所有指向的 URL,/index.html以便应用程序正确路由它?
我有以下情况:
/v1.0.0
index.html
main.js
/v1.1.0
index.html
main.js
Run Code Online (Sandbox Code Playgroud)
我正在将 S3 与 Cloudfront 结合使用,并且一切正常,但客户端路由已损坏。这就是说我能够访问每个应用程序的根目录,即。https://<app>.cloudfront.net/<version>,但无法到达任何客户端路由。
我知道可以将错误文档设置为重定向到index.html,但我相信此解决方案仅在每个存储桶都有一个时才有效index.html(即,我无法为每个基于路由的路径设置错误文档)。
解决这个问题的最佳方法是什么?
amazon-s3 amazon-web-services amazon-cloudfront single-page-application react-router
我在S3 存储桶上使用React JS制作了一个SPA,并且使用Cloud Front 通过 HTTPS 和自定义域进行工作。当我刷新页面时 - 如果我有另一个不是 BASE_URL 的路由(例如domain.com/something),S3会向我发送 404 错误。
\n我还尝试将错误页面重定向到 BASE_URL,但它不起作用\xe2\x80\x99,它将我重定向到 S3 为我提供的 Http 默认域,并且再次给我一个 404 错误页面。
\n我不\xe2\x80\x99t 知道是否存在另一种方法来保持 URL 不变(domain.com/page)并避免 Web 服务器(apache)处理的 404 错误。
\ndeployment amazon-s3 amazon-cloudfront single-page-application reactjs
我目前正在尝试将默认的 React Web 应用程序部署到 Azure,但遇到了一个问题,尽管我将构建文件夹的内容部署到了 azure 托管的 /site/wwwroot 文件夹,但在转到托管地址:https://[project_name].azurewebsites.net/
我打算部署默认的 create-react-app 反应应用程序,以便我可以在部署我的真实站点时停止该过程。我遵循的过程几乎就是本文中提到的https://medium.com/@to_pe/deploying-create-react-app-on-microsoft-azure-c0f6686a4321
为了矫枉过正,我添加了下面的 web.config 文件来处理未来的路由,但也尝试过没有这一步
最后我的 Azure 站点的内容是这样的
此时,当我尝试访问 Azure 站点时,我收到“嘿,Node 开发人员!”的提示。这意味着我的代码未部署的页面。关于为什么会这样的任何想法?
*** 我有一种预感,在 Azure Web Api 的配置过程中,有些东西没有正确设置,这可能是因为我选择 Node 10.14 作为我的运行时堆栈,仅仅是因为这是我安装的 Node 版本,并与我的本地一起使用反应应用程序。
谢谢你们的时间。
我有一个存储桶并在其中启用了静态网站托管。
假设我在存储桶中只有两个文件 (index.html) 和 (error.html)
如果使用 test.html 命中请求,则拒绝访问或不抛出此类关键错误。
如果出现此类错误,如何重定向到 error.html?
我正在尝试在 S3 存储桶上托管一个具有多个路径的网站。这是一个可用的选项吗?
本地主机:3000
本地主机:3000/政策
example.com <-- 有效
example.com/policy <-- 没有密钥错误时不起作用
404 未找到代码:NoSuchKey
消息:指定的密钥不存在。
关键词:政策
我正在本地主机上运行的应用程序上使用 React-Router-Dom 开关
<Switch>
<Route path="/policy"><PolicyComponent><Route>
<Route path="/"><HomePageComponent><Route>
<Switch>
Run Code Online (Sandbox Code Playgroud) amazon-s3 ×9
react-router ×4
reactjs ×4
azure ×2
android ×1
aws-application-load-balancer ×1
azure-devops ×1
deployment ×1
http ×1
http-headers ×1
javascript ×1
routes ×1
static-site ×1
web-hosting ×1