Amazon ELB の前にApacheのプロキシをおいたらレスポンスヘッダが壊れた。。
mydomain.com みたいなドメインのEC2上で稼働しているサービスでElastic Load Balancerを使うことなったので、EC2のロードバランサーのIPアドレスが変わる罠を回避するために、ELB前に reverse proxy を置いて、mydomain.com をElastic IP に割り当てる構成にした。
こんな感じ。
client |-----| Apache Proxy |--| ELB |---| Apps(Apache) |
この形でサービスをホストしたところ、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-alivefbb
...以下省略
期待するレスポンスボディは
なんですが、どうやら、Appsサーバーからのレスポンスヘッダがレスポンスボディに吸収されてしまっている様子。
...以下省略
keepalive, deflate, timeout など、もろもろ変更してみても、改善しない。ELBに直接アクセスすると、100%期待するHTMLが帰ってくるんですが。。
解決策が見つからず、途方にくれてしまったので、プロキシをnginxに変えたところ、問題解消。
なんでだろ。Apacheのバグか??