【问题标题】:AWS Serverless 403 forbidden API gatewayAWS Serverless 403 禁止 API 网关
【发布时间】:2019-11-20 16:14:44
【问题描述】:

我正在尝试创建一个无服务器 Nodejs 应用程序。我将我的应用程序部署到 S3 并且它正在运行。但是 URL 似乎是https://xxxxxxxx.xxxxx-api.us-west-2.amazonaws.com/prod。所以,每当我的应用程序试图获取 css 文件或视频文件,甚至是链接到 URL/ 时,这是完美的。但是这里的 url 是 URL/prod,它应该是 URL/prod/whichever-route-it-is 所以,我的静态文件没有被渲染,甚至链接都不起作用。有没有办法重新路由到 URL/prod 或从 api 端点删除 prod?

【问题讨论】:

  • 通常,您应该从您的 S3 存储桶中提供静态资产(如 CSS),可能通过 CloudFront 间接提供,而不是从您的 API 提供。并考虑使用 AWS SAM 或无服务器框架,因为它们会让这一切变得简单。

标签: node.js amazon-web-services aws-lambda aws-serverless


【解决方案1】:

AWS API Gateway 在 URL 中遵循此模式:

www.example.com/my-base-path/MyStage

您必须相应地配置每个部分。例如,您可以创建一个基本路径“prod”,并为类似以下内容的阶段“whichever-route-it-is”:

www.example.com/prod/whichever-route-it-is

基本路径映射在自定义域名下配置。

【讨论】:

    【解决方案2】:

    将保存静态文件的文件夹移动到 S3 中的 /prod/ 子文件夹中。

    或者,使用 Cloudfront 将 /css/、/js/ 或任何静态路径路由到 S3 存储桶并跳过 API 网关

    或者,将 API 网关配置为覆盖 /css/、/js/ 或其他路径的路径

    我更喜欢将文件移动到子文件夹或 Cloudfront 解决方案。这允许控制 API 的不同阶段。例如,当您准备启动 v2 但尚未完全取消 v1 时,您可能希望 prod/ 和 prod_v2/ 可用。这样,您的文件夹结构就可以很好地映射到 API Gateway 阶段。

    【讨论】:

    • 我正在关注这个tutorial来部署快递应用程序。因此,整个包被压缩并上传到 S3。我怀疑即使我单独放置静态文件,我也应该更改链接对吗?我的意思是 /home 到 /prod/home。
    • 我认为此链接可能会有所帮助:expressjs.com/en/starter/static-files.html - 您应该能够使用该信息为您的特定应用程序制定正确的配置。是的,你的资产应该包括他们被请求的阶段(即:prod)
    • 感谢您的宝贵时间。我更改了自定义域名中的基本路径映射,现在正在呈现文件。
    猜你喜欢
    • 2018-11-09
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多