リバースプロキシを利用していると、ごく稀に502が戻ってくる問題

mod_proxyを利用していると、ごく稀に502が戻ってくる問題 Apache

CopyContentDetectormod_proxy_balancerを使ってリバースプロキシ環境を構築、リソースを分散できるようにしています。各種パーツをAPIで提供することで、負荷が上がっても小さいサーバを増やせば大丈夫なように設計してあります。

■たまに502を戻してアクセスできなくなることがある

で、このmod_proxyで構築したAPIのサーバ、まれに以下のようなエラーが発生していました。ほぼ問題なく動くのですが、本当にたまーに発生して、調査バッチがエラーになります。

[Tue Apr 26 12:22:03 2016] [error] [client 192.168.0.2] (70007)The timeout specified has expired: proxy: error reading status line from remote server 192.168.0.2
[Tue Apr 26 12:22:03 2016] [error] [client 192.168.0.2] proxy: Error reading from remote server returned by /xxxxxxxxx

 

■原因

で、いろいろ調べてみると、公式ドキュメントに書いてありました。要約するとコネクションプール的なのをApacheが使っていて、何らかのタイミングでバックエンド側が通信が終わる前にコネクションを閉じた時に競合が発生、この現象が発生するようです。

 

■設定を変える

というわけで、一旦パフォーマンスは落ちるかもしれませんが、このコネクションプール的なのを使わないようにします。以下の行を、httpd.confなどのmod_proxyの設定をしてあるところに記述します。

SetEnv proxy-initial-not-pooled 1

 

これで、一旦様子を見たいと思います。

2016-05-03 現在、この現象は一度も発生していません。解決したみたいです。

では。