我们的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服务器超时设置为,相同的结果,我们的日志将被这408个污染。更大的问题是,它们还拖延了ELB的平均延迟响应时间,而这正是我们触发自动缩放器的原因。
我们在后端实例上使用Tomcat。在tomcat上没有日志显示表明已接收到请求,但ELB仍显示请求已超时。
在我们的ELB访问日志中,没有为408分配后端IP,因此在我看来,请求从未到达实例,但Amazon反对:(。
有人遇到这个问题并找到了可靠的解决方案吗?
最佳答案
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错误,并将所有运行状况检查记录在单独的日志中,因此您可以获得常规访问日志的整洁日志以及用于运行状况检查的专用日志。