amazon-web-services - API 网关可以代理到 HTTP 服务器而不是 json 吗?
问题描述
我正在尝试使用 AWS API Gateway 作为私有 HTTP 服务的身份验证解决方案,但在设置它时遇到了麻烦。
我有一个虚拟 node.js 服务在私有 VPC 中运行,前面有一个内部网络负载均衡器(注意:它很健康)。
然后我设置了一个 API 并在本指南中配置了一个 VPC 链接:https ://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-with-private-integration.html
get 方法的资源 URL 指向内部网络负载均衡器的 DNS 名称。
当我导航到 API 网关 URL(例如https://ABC123.execute-api.us-west-2.amazonaws.com/prod/)时,我能够获得服务器的 HTML 响应(见下文) . 但是,javascript 文件返回一个403 Forbidden
. 我希望这与路径设置有关。
除了返回单个响应(即 json API 响应)之外,有没有办法配置 API 网关以返回包含 HTML、css 和 js 资源的完整应用程序?
这是运行应用程序的虚拟代码:
// server.js
var express = require('express'),
app = express();
app.use('/', express.static('/home/ubuntu/static/'));
app.listen(8080);
索引页面 - 这是我点击 API 网关时加载的页面
<!-- static/index.html -->
<html>
<body>
<h1>Hello world!</h1>
<p>This is some text.</p>
<script src="./app.js"></script>
</body>
</html>
这个 JS 加载失败(403)并且没有执行。
// static/app.js
console.log('Logging from app.js');
alert('WOOT!');
解决方案
您可以在 AWS 的 Lambda 面板中验证您的函数是否被调用(并正确配置)。如果您的 API Gateway 配置正确,它应该显示为您的 lambda 函数的触发器:
之后,您可以在监控选项卡上查看 lambda 的统计信息和日志:
您需要一个事件处理函数,将 API Gateway 请求重定向到 express 应用程序上的相应资源,这意味着您需要实现某种中间层以将 API Gateway 请求正确映射到您的 express 方法/路径/参数/文件。
AWS Lambda 是在 API Gateway、SNS、Alexa Skills 等服务上发生事件时调用的函数。我会尝试设置aws-serverless-express,或使用其他一些服务,例如 Elastic Beanstalk 或 ECS
推荐阅读
- excel - 在 Excel 中,如何根据另一张表的内容自动填充多列中的值?
- python - 机器人在提及以及当有人回复机器人消息时做出响应
- hard-drive - 是否可以访问 pata 驱动器(驱动器 0 和驱动器 1)中的所有寄存器?
- python - 使用通配符过滤模型对象
- javascript - 如何使用 json 数据更改 nuxt.js Web 应用程序的头部标题名称?
- android - 即使应用程序打开,广播接收器也不会在 Android 8 及更高版本中触发
- python - 使用 Apache Beam 读取自定义格式文件
- python - 我应该怎么做才能删除名称错误
- oracle - 具有通用记录类型的 Oracle 流水线功能?
- kubernetes - 无法从 K8s 中的 Kafka pod 连接 Zookeeper pod