跳至内容

如何对 API Gateway 私有集成中的“400 Bad Request”错误进行故障排除?

2 分钟阅读
0

我在 Amazon API Gateway 中使用私有集成功能调用 API 时收到“400 Bad Request”错误。

解决方法

当 API Gateway 私有集成存在配置问题时,会出现“400 Bad Request”错误。

HTTP API

应用程序负载均衡器或在 HTTPS 或 TLS 端口上配置侦听器的网络负载均衡器收到请求

默认情况下,HTTP API 的私有集成使用 HTTP 协议。如果您配置了 HTTPS 或 TLS 侦听器,则负载均衡器会期望接收 HTTPS 请求而不是 HTTP 请求。这会导致以下错误:

<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx</center>
</body>
</html>

对于 HTTPS 或 TLS 侦听器,必须在 TLS 配置中指定服务器名称。要配置 HTTPS 协议,请完成以下步骤:

  1. 记录内部应用程序负载均衡器或网络负载均衡器的域名。
  2. 打开 API Gateway 控制台
  3. 打开 API 的集成设置以编辑配置。
  4. 使用步骤 1 中的域名指定 TLS 配置的服务器名称。
  5. (可选)如果您关闭了自动部署,请重新部署 API。

失调缓解模式设置为最严格

HTTP API 允许私有集成或虚拟私有云 (VPC) 链接集成使用应用程序负载均衡器。如果正确配置 API Gateway 后,应用程序负载均衡器的失调缓解模式设置为 strictest(最严格),则会收到以下错误:

<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
</body>
</html>

失调缓解模式可保护您的应用程序免受 HTTP 失调引起的问题影响。有关详细信息,请查看应用程序负载均衡器指标 DesyncMitigationMode_NonCompliant_Request_Count

要关闭失调缓解模式,请完成以下步骤:

  1. 打开 Amazon Elastic Compute Cloud (Amazon EC2) 控制台
  2. 在导航窗格中,选择 Load Balancers(负载均衡器),然后选择要编辑的网络负载均衡器。
  3. 选择 Actions(操作),然后选择 Edit load balancer attributes(编辑负载均衡器属性)。
  4. 对于 Packet handling(数据包处理),选择 Defensive(防御)。
  5. 选择 Save changes(保存更改)。

REST API

在 TLS 端口上配置侦听器的网络负载均衡器收到请求

配置有 TLS 侦听器的网络负载均衡器期望来自上游服务的 HTTPS 请求。如果您在 REST API 配置中将 HTTP URL 指定为集成端点 URL,则请求会失败并显示以下错误:

<html>
<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>The plain HTTP request was sent to HTTPS port</center>
<hr><center>nginx</center>
</body>
</html>

要配置 HTTPS 协议,请完成以下步骤:

  1. 打开 API Gateway 控制台
  2. 打开 API 的集成设置以编辑配置。
  3. 修改端点 URL 以使用 https:// 而不是 http://
  4. 重新部署 API。

**重要事项:**当端点 URL 更改适用于 HTTPS 时,请确保使用您在配置 TLS 侦听器时使用的相同域名。

相关信息

如何将 API Gateway REST API 与应用程序负载均衡器进行集成?

如何删除我的 Amazon Gateway REST API 的 Amazon VPC 链接?