【问题标题】:408 timeouts on my Amazon ELB我的 Amazon ELB 上出现 408 次超时
【发布时间】:2016-03-18 15:52:03
【问题描述】:

我们在 ELB 访问日志中看到很多 408 超时。遇到过这个话题https://serverfault.com/questions/485063/getting-408-errors-on-our-logs-with-no-request-or-user-agent

还有https://forums.aws.amazon.com/thread.jspa?messageID=307846

这些只是我发现的两个示例线程,但其他人提出了相同的解决方案,但没有任何乐趣。

已将 Web 服务器超时设置为 than it,同样的结果,我们的日志被这些 408s 污染了。一个更大的问题是它们也会影响我们 ELB 的平均延迟响应时间,而这正是我们触发自动缩放器的原因。

我们在后端实例上使用 Tomcat。 tomcat 上没有日志显示已收到请求,但 ELB 仍显示请求已超时。 在我们的 ELB 访问日志中,没有为 408 提供后端 IP,因此在我看来,请求根本没有到达实例,但亚马逊不同意 :(。 有没有人遇到过这个问题并得到了可靠的解决方案?

【问题讨论】:

  • 这是一个与编程相关的问题吗?我想也许你应该问一下服务器故障
  • 最好在 serverfault.com 上询问

标签: amazon-web-services


【解决方案1】:

suggestion of milsonspt in the linked thread 之后,我向我的服务器添加了一个虚拟主机,它监视不同的线程而不是 80,因此所有运行状况检查都将在该主机上执行(将 CUSTOM_PORT 替换为您希望用于 ELB 运行状况检查的任何端口)。

Listen CUSTOM_PORT

<VirtualHost *:CUSTOM_PORT>
    CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log_elb_health_check_rotated_%Y-%m-%d-%H_%M_%S 10M" combined
</VirtualHost>   

确保 ELB 确实没有在该端口上有侦听器。

该配置删除了 408 错误并将所有运行状况检查记录在一个单独的日志中,因此您可以获得一个用于常规访问日志的整洁日志,以及一个用于运行状况检查的专用日志。

【讨论】:

    【解决方案2】:

    当 ELB 等待客户端完成请求时,可能会发生这种情况。如果有部分请求进来,但标头不完整,AWS ELB 只会等待。 AWS ELB 不会对部分请求标头执行任何操作,最终由于 tcp 连接上的空闲超时到期而以 408 req_timeout 响应。

    【讨论】:

    • 这应该是评论而不是答案,
    猜你喜欢
    • 1970-01-01
    • 2019-06-18
    • 2018-02-01
    • 2014-11-04
    • 2017-03-01
    • 2010-12-12
    • 1970-01-01
    • 2013-02-12
    • 2021-10-08
    相关资源
    最近更新 更多