【问题标题】:API Gateway VPC Link Integration to NLB gives 404API Gateway VPC 链接集成到 NLB 提供 404
【发布时间】:2020-11-19 11:13:52
【问题描述】:

我有一个这样配置的代理+资源,

NLB 是内部的,所以使用 VPC 链接,但是当我点击 API 网关阶段 url 时,我得到 404。下面是日志,

(some-request-id) Sending request to http://masked.elb.us-east-1.amazonaws.com/microservice/v2/api-docs

Received response. Status: 404, Integration latency: 44 ms

但是当我从浏览器的日志中复制粘贴相同的 NLB URL 时,我得到了带有 HTTP 200 的 json 响应。

我在这里缺少什么?

【问题讨论】:

    标签: amazon-web-services proxy aws-api-gateway aws-load-balancer nlb


    【解决方案1】:

    这个 404 是从负载均衡器上的应用程序返回的,所以它肯定是连接的。

    我可以从您的请求中看到您指定的主机名是 ELB 名称,应用程序是否在侦听此主机名?某些 Web 服务器服务(例如 Apache 或 Nginx)如果在另一个可能不会访问您的应用程序的虚拟主机中不匹配,则会访问第一个虚拟主机。

    您在 API Gateway 中指定的域名应该是它将连接到主机上的域名,VPC Link 存储了该链接所针对的负载均衡器的信息。因此,如果您的 API 有一个用于 https://api.example.com 的 VHOST,您将指定 https://api.example.com/{proxy}

    从您的主机上,您应该能够在访问日志(和错误日志)中看到它尝试从哪个主机/路径加载。

    【讨论】:

    • 是的,应用正在监听ELB,我可以通过VPN直接访问ELB,可以访问成功。
    • 如果您访问其中一台主机,您是否可以在测试时在访问日志中看到请求?
    • 不幸的是,我们没有启用访问日志,并且该应用程序正在 Fargate 中运行.. 所以我看不到在接下来的几个小时内我可以在应用程序中启用访问日志的机会。 .
    • 嗯,如果没有它,可能很难调试,因此要确认您是否在连接到 VPN 时访问 http://masked.elb.us-east-1.amazonaws.com/microservice/v2/api-docs 它可以工作,但是当 API 网关访问这个确切的端点(包括相同的域名)时,它也可以得到 404?
    【解决方案2】:

    事实证明,我指向了错误的 VPC 链接。一旦我指向正确的 VPC 链接,它就开始工作了。

    这里的关键是,即使 API Gateway 日志告诉我,它正在访问 http://masked.elb.us-east-1.amazonaws.com/microservice/v2/api-docs,但它实际上并没有访问此 URL。相反,它会命中 VPC 链接所附加到的 NLB。

    我通过将 Endpoint URL 中的域名更改为,确认了这一点, http://domainwhichdoesnotexist.com/microservice/v2/api-docs

    在日志中我看到了这一点,

    Thu Jul 30 09:28:09 UTC 2020 : Sending request to http://domainwhichdoesnotexist.com/microservice/api/api-docs
    Thu Jul 30 09:28:09 UTC 2020 : Received response. Status: 200, Integration latency: 72 ms
    

    【讨论】:

      猜你喜欢
      • 2018-09-06
      • 2022-06-14
      • 2020-04-19
      • 2021-02-20
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 2020-08-14
      • 2021-07-21
      相关资源
      最近更新 更多