TCP_MISS_ABORTED/000
ときどき(1〜2回/日)zabbixで監視しているウェブサイトからエラーの報告があります。
誤検知かなとしばらく無視をしていたんですが、アクセスログをチェックしてみるとちゃんとエラーになっている模様。
HTTPステイタスは403でForbidden。実は、mod_securityで引っかかって403になっているだけで、実際はapacheの後ろにいるSquidが503を返している。
それがこんなログ。
1458695235.489 10010 127.0.0.2 TCP_MISS_ABORTED/000 0 GET http://127.0.0.2:3128/ - FIRSTUP_PARENT/127.0.0.2 -
2カラム目がSquidが返しているサイズで、おそらくSquidのエラーページを出している模様。
ウェブのソフトウェア的な構成としてはこんな感じになっています。
Apache(1):443 -> Squid:3128 -> Apache(2):80 -> Apache(3):7080 ||< 上記Apache(1)とApache(2)は同一プロセスで名前ベースの仮想ホスト。Apache(3)がバックエンド本体でコンテンツはこいつが返しています。 上記のログがでたときには、SquidはちゃんとApache(3)にリクエストをだしていて、その返事をまたずにTCP_MISS_ABORTEDでセッションを終了している。 うーむ、これはこまった。しかも時々しか発生しないのがいやらしい。 とりあえず以下の処置。 **タイムアウト値を調整 それぞれのタイムアウト値をすこし長めに調整。150秒程度で。 Apacheだとこんな。 >|| Timeout 150 ProxyPass / http://127.0.0.2:3128/ timeout=180
Squidから後ろのApacheへのタイムアウト設定はこんな。
cache_peer 127.0.0.2 parent 80 0 max-conn=256 no-query originserver name=hogefuga connect_timeout=180
pconn_timeoutの値を短めに
KeepAliveでコネクションをガメるんじゃなくてどんどん開放して新しくコネクションをつくってもらう。
pconn_timeout 3 seconds
デフォルトは1minだったと思う。