Amazon Web Service (AWS) の Elastic Load Balancing (ELB) の場合はIPアドレスが固定ではなくhostsファイルでは設定しにくいというところもあり、DNSのレコードを未設定のホストにブラウザからアクセスしたい場合には、proxy.pacでELBのAレコードに向けてしまうと便利です。この場合、ELBは設定したEC2インスタンスへのプロキシサーバーとして振る舞ってくれるので、何も準備をしなくてもHTTPであれば表示することができます。ただHTTPSに関しては、proxy.pacで設定した場合にはブラウザはCONNECTメソッドを使って繋ぎにいくのですが、ELBがCONNECTメソッドには対応していないため、表示することができません。
そのような問題を解決するためのツールを書きました。
どのように動作するのか?
- r2proxyは、(オプション無しで起動すると) 直接の接続元へのHTTPのプロキシサーバーとして動作します。( CONNECTメソッドにも対応しています)
- ELBのインスタンスは、(2014年10月時点では)接続元のIPアドレスに接続しても、設定したInstance Portから応答を返してくれるようなので、その動作を利用しています。
- ELBでTCPのListenerを一つ作り、それをr2proxyに向けます。
- proxy.pacで、TCPのListenerのポートを指定すると、HTTPSのリクエストを表示できるようになります。
特徴
- ELBのHTTPSのListenerを利用できます。
- EC2のインスタンスでHTTPSの設定をする必要がありません。
- ELBの"Cookie Stickiness"を利用できます。(2014年10月時点)
- デフォルトで想定している使いかたの場合には、環境ごとの個別の設定は必要ありません。
- コンパイル済みのプログラムをコピーして実行すれば動作します。
懸案事項など
- 「接続元のIPアドレスからも応答を返してくれる」という現時点での挙動に依存しているので、これが変更になった場合には動作しなくなります。
- ELBとインスタンスの間のやりとりが一往復増えていたりするので、r2proxyはHTTPの(HTTPS向けでない)プロキシサーバーとしても動作していますが、HTTPSのリクエストのみを向けるのがいいと思います。
- CONNECTメソッドを使うことになるので、接続先のホスト名はHTTPで暗号化されずに送信されます。(HTTPSに関してはリクエストと応答の内容は暗号化されます)
コメント