■実現したい事
AWS上でフォワードプロキシサーバを冗長構成(act/act)で用意する。インタネット越しでそのプロキシサーバを利用する。
■実現方法
■構成イメージ
■構築方法
※NATの構築方法については割愛します。
1.フォワードproxyサーバ
※今回はApacheを利用
1-1.apacheのインストール
1 | #yum install httpd |
1-2.サービスポートを80以外に変更する
※ここがキモ(80だとELB経由では実現できません!)
1 | Listen 8080 |
1-3.フォワードproxyを有効に設定する
1 2 3 4 5 6 7 8 9 | <ifmodule mod_proxy.c=""> ProxyRequests On <proxy *=""> Order deny,allow Allow from all </proxy> ProxyVia On </ifmodule> |
※Allow from all
はセキュリティ要件に合わせて調整したほうがよいです。
1-4.apache再起動
1 | #service httpd restart |
2.ELB
2-1.Port Configurationの設定
■注意事項
ELBのPort Configurationで80ポートを使用した場合、ELBがHTTPリクエストのURIパラメータを書き換えてEC2に渡してしまう為、正しくフォワードされなくなります。
http://cloudpack.jp がターゲットである場合の例で説明しますと、クライアント端末からELBへのリクエストのURIパラメータ
GET https://cloudpack.jp/ HTTP/1.1 |
は上記のとおりで、
80ポートを使用した際の、ELBからEC2に渡されるURIパラメータは
GET / HTTP/1.1 |
※”http://cloudpack.jp”がすっぽり抜けます
→ 結果、”/”が指定されている為、forward proxyサーバのローカルドキュメントルートのindex.htmlが返されることになります。
80ポート 以 外 を使用した際の、ELBからEC2に渡されるURIパラメータ
GET https://cloudpack.jp/ HTTP/1.1 |
※クライアント端末から渡されたものがそのままELBからEC2に渡されます
■動作確認方法
curl
コマンドでproxyサーバ指定して行う方法
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | $ http_proxy=http://xxxx-yyyyyyy.ap-northeast-1.elb.amazonaws.com:8080 curl https://cloudpack.jp/ -v * Adding handle: conn: 0xAAAAAAAAAA * Adding handle: send: 0 * Adding handle: recv: 0 * Curl_addHandleToPipeline: length: 1 * - Conn 0 (0xBBBBBBBBBBB) send_pipe: 1, recv_pipe: 0 * About to connect() to proxy xxxx-yyyyyyy.ap-northeast-1.elb.amazonaws.com port 8080 (#0) * Trying zzz.zzz.zzz.zzz... * Connected to xxxx-yyyyyyy.ap-northeast-1.elb.amazonaws.com (zzz.zzz.zzz.zzz) port 8080 (#0) > GET https://cloudpack.jp/ HTTP/1.1 > User-Agent: curl/7.30.0 > Host: cloudpack.jp > Accept: */* > Proxy-Connection: Keep-Alive > < HTTP/1.1 200 OK < Date: Thu, 19 Feb 2015 02:53:27 GMT * Server nginx is not blacklisted < Server: nginx < Content-Type: text/html; charset=UTF-8 < Vary: Accept-Encoding < X-Cached: Thu, 19 Feb 2015 02:03:12 GMT < Via: 1.1 ip-dd-ee-ff-gg.ap-northeast-1.compute.internal < Connection: close < Transfer-Encoding: chunked < <!DOCTYPE html> <html lang="ja"> ~中略~ </html> |
以上です。
元記事はこちらです。
「ELB経由でフォワードプロキシ on EC2」