share facebook facebook facebook twitter twitter menu hatena pocket slack

2015.02.25 WED

ELB経由でフォワードプロキシ on Amazon EC2

三浦 剛慈

WRITTEN BY 三浦 剛慈

こんにちは、cloudpack三浦剛慈 です。

■実現したい事

AWS上でフォワードプロキシサーバを冗長構成(act/act)で用意する。インタネット越しでそのプロキシサーバを利用する。

■実現方法

  • Internet facingのELBを作成する
  • Cent OS on EC2上でフォワードプロキシサーバーを2台起動させる
  • ELBにフォワードプロキシサーバーを2台ぶら下げる

■構成イメージ

ELB経由でフォワードプロキシ on Amazon EC2: 構成イメージ

■構築方法

※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経由でフォワードプロキシ on Amazon EC2: ELB 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

三浦 剛慈

三浦 剛慈

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。

:)