7

我们在亚马逊上有一个负载均衡器,可以平衡 4 台服务器。当向负载均衡器发送特定的 HTTP 请求时,我得到 Http 错误代码 400。但是当我直接向每台服务器发送相同的请求时,我得到 Http 200 OK。使用平衡器时,其他请求工作正常。

有任何想法吗?

谢谢。

4

4 回答 4

8

不知道这是否会帮助你,但我遇到了类似的问题。我使用的是 jMeter,当通过 AWS 负载均衡器访问我的实例时,我总是会得到:HTTP/1.1 400 BAD_REQUEST。经过大量调试后,我发现我正在发送一个空标头(没有名称也没有值),因为我在 jMeter 的 HTTP 标头管理器中有一个空行。因此,我认为,AWS ELB 会检查一些标头,并返回 HTTP 400,即使直接向我的实例发出相同的请求,我也没有遇到任何问题。我不知道这是否会帮助你,但你应该仔细检查你的标题是否有像这样的愚蠢错误:D

于 2013-02-05T09:34:55.783 回答
5

我遇到了类似的问题,这是由于 ALB 不接受小写的 HTTP 方法引起的。

GET http://myhost.com/foo -> HTTP 200
get http://myhost.com/foo -> HTTP 400
于 2018-06-04T17:08:19.300 回答
1

就我而言,这是标题问题。

ELB-HealthChecker 正在向我的 Web 服务器发送健康检查请求,而 nginx 回复了 400。

问题是 ELB-HealthChecker 没有随请求发送标头。根据您的网络服务器的配置,这可能会返回 400 错误代码。

要检查是否是这种情况,请使用 curl 复制“no headers”请求:

curl -I -H 'User-Agent:'  -H 'Accept:' -H 'Host:' http://yourservice/health/

解决方案是配置将返回 200 的 nginx 端点,而不管请求标头是否存在:

location = /health/ { return 200; }
于 2019-05-20T15:45:19.570 回答
0

在我的情况下,我的端口 443 的目标组使用 HTTP 协议而不是 HTTPS,我得到“客户端使用 HTTP 连接到 HTTPS 服务器”

于 2021-03-04T06:10:44.903 回答