Apache2.4系で、ELB(Classic)を使用している環境で、Apacheのアクセスログに以下のエラーが頻繁に出力しているのを偶然発見しました。
: 172.31.28.81 - - [02/Jun/2017:19:30:53 +0900] "-" 408 - "-" "-" 172.31.28.81 - - [02/Jun/2017:19:30:53 +0900] "-" 408 - "-" "-" :
正常時のログ
: 172.31.11.74 - - [02/Jun/2017:19:30:54 +0900] "GET /healthcheck HTTP/1.1" 200 12 "-" "ELB-HealthChecker/1.0" :
【原因と思われるもの】
ELBのアイドルタイムアウト値の方が長い為、apacheが該当TCPコネクションを切断しているため、408(タイムアウト)となってしまう模様。
ELBタイムアウト値
ELBがEC2のWebサーバに対して、コネクションをはっており、デフォルト設定で60秒で設定されています。
Apache2.4のRequestReadTimeoutディレクティブのデフォルト値
header=20-40,MinRate=500 body=20,MinRate=500
【対応】
現在、以下の状況ではエラーとなる。
ELB:Idle Timeout値60秒
Apache:header+bodyでmax60秒
ELBのIdle Timeout値を60秒⇒50秒にするだけで、408 Request_Timeoutは出なくなりました。
因みにELBのIdle Timeout値を60秒⇒59秒では、NGでした。
ELBの設定時、デフォルトのままでも、障害にはならないので、気付きにくいですね。