【问题标题】:AWS API Gateway not reverse proxying correctlyAWS API Gateway 未正确进行反向代理
【发布时间】:2017-01-27 11:01:19
【问题描述】:

我正在尝试使用 AWS API Gateway 作为反向 HTTP 代理来处理部署为弹性 beanstalk 应用程序的几个原型 Web 应用程序:

配置

每个 EB 应用程序都在 API Gateway 中映射到其应用程序名称下,例如

/hello1 (API Gateway mapping) --> prototype1 EB application 
/hello2 (API Gateway mapping) --> prototype2 EB application
... etc

这是我创建的整体映射:

API 网关似乎在每个映射中处理对根资源的请求,例如'/' 与对子资源的请求不同,因此我为两者都设置了代理映射:

根 ('/') 资源是直接的(即非贪婪的)代理映射:

然后对于根上下文下的任何东西都有一个贪婪的代理映射:

然后我将 API 部署到名为“master”的阶段

我的想法是访问每个原型,我会获取 URL http://protos.acme.com/<stage>/<proto_name>,例如http://protos.acme.com/master/hello1.

问题

我发现如果我在 URL 中添加一个斜杠,或者指定一个特定的资源,例如index.html 然后一切正常,例如

但是,如果我从 URL 中省略尾部斜杠,例如http://protos.acme.com/master/hello1 然后 API 网关完成的 URL 重写停止工作,代理内容中的任何 URL 都不再正确解析,因为它们省略了原型名称,例如http://protos.acme.com/master/index.html

我找不到任何方法来配置省略尾部斜杠时的行为,我认为强制我的用户始终记住尾部斜杠是不可接受的。

感谢任何见解!

艾德

【问题讨论】:

  • 您可以分享您在“非贪婪”任何方法中使用的集成端点吗?假设该方法正确,您的配置应该可以工作。
  • 我已经测试并确认上述配置对我有效。请提供您如何为贪婪和非贪婪方法配置端点 URL。

标签: amazon-web-services proxy reverse-proxy aws-api-gateway


【解决方案1】:

我设置了一个快速测试,如果我在资源根路径以及ANY {proxy+} 路径之外明确定义GET 方法,它似乎可以工作。

【讨论】:

  • 嘿戴夫,我已经尝试重新配置以匹配您的示例,但我不确定您是如何配置这 2 个 GET 方法的。我假设您将它们配置为 HTTP 集成,但您是否配置了代理等(如果是的话,您在每种情况下都配置了什么 URL?)。谢谢!
  • 对于 GET 方法,我使用了 HTTP 代理集成和 URL http://example.tld/。对于 ANY {proxy+} 路径,我使用了 HTTP 代理集成和 url http://example.tld/{proxy}
  • 我在 SonarQube 上遇到了类似的问题,其中 sub.domain.com 会显示缺少“丢失的令牌”但不是根 url,例如“sub.domain.com/anything”会代理。这解决了我的问题。我还添加了类似@DaveMaple 的路径
【解决方案2】:

我遇到了同样的问题,我正在使用带有自定义域的 AWS API 网关和 aws-serverless-proxy 来处理 node.js 后端中的 api。

如果我的自定义域 URL - https://host.com,basepath - test, 然后通过代理集成有效的可访问 url - https://host.com/test/(带斜线)

所以,如果传入的请求 url 不以“/”结尾,我将在后端重定向 url。

示例代码:读取传入请求并将响应重定向到相同的 url,但在末尾添加斜杠。

let requestUrl = req.url;
    if (requestUrl !== undefined && !(requestUrl.endsWith('/'))) {
        res.writeHead(302, { 'Location': `${req.url}/` });
        res.end();
    }

【讨论】:

    猜你喜欢
    • 2022-09-30
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多