Amazon ELB の前にApacheのプロキシをおいたらレスポンスヘッダが壊れた。。

mydomain.com みたいなドメインのEC2上で稼働しているサービスでElastic Load Balancerを使うことなったので、EC2のロードバランサーのIPアドレスが変わる罠を回避するために、ELB前に reverse proxy を置いて、mydomain.com をElastic IP に割り当てる構成にした。

こんな感じ。
client |-----| Apache Proxy |--| ELB |---| Apps(Apache) |

  • Apache Proxy:
    • Elastic IPをアタッチして、mydomain.comを割り当て
    • ELBのFQDNに向かってプロキシするように設定
    • workerモデル

この形でサービスをホストしたところ、2-3%の割合で、壊れたレスポンスヘッダがレスポンスボディと一緒に帰ってくるという問題が発生。

ブラウザにこんな感じでテキスト表示されてしまう。


0
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF8
Date: Wed, 27 Oct 2010 14:35:59 GMT
Server: Apache/2.2.9 (Fedora)
Set-Cookie: magic=14339-e654dbadf9709a0c5481e956d88601965271e510; expires=Thu, 27-Oct-2011 14:35:59 GMT; path=/
X-Powered-By: PHP/5.2.6
transfer-encoding:chunked
Connection: keep-alive

fbb


...以下省略

期待するレスポンスボディは




...以下省略
なんですが、どうやら、Appsサーバーからのレスポンスヘッダがレスポンスボディに吸収されてしまっている様子。

keepalive, deflate, timeout など、もろもろ変更してみても、改善しない。ELBに直接アクセスすると、100%期待するHTMLが帰ってくるんですが。。

解決策が見つからず、途方にくれてしまったので、プロキシをnginxに変えたところ、問題解消。
なんでだろ。Apacheのバグか??