用件
- 他社のAPIを叩く時にIP制限をかけられる事がままあるので、固定IPにしたい
- EC2にはEIPという固定IPが存在するが、WEBサーバーの特性上サーバーの台数が不変ではないため、EIPを先方のファイアウォールに設定するのは好ましくはない
- WEBサーバー全台にEIPを付けていたらきりがない
- AWSにはNATインスタンスが用意されているが、全てのトラフィックをそこに向けるのは冗長性を壊す事になるし、トラフィックのボトルネックにもなりうる
- トラフィックを受けながらNATインスタンスに切り替えるのが結構大変
- 特定のドメインへのアクセスだけ、特定のサーバーを通る様な仕組みにしたい
どうするか
内部にリバースプロキシを立てて、特定のドメインは一度そのリバプロを通過するようにする。
その為に、最初はリバプロを向いているlocalドメインにアクセスし、publicドメインにリダイレクトするように設定する。
構成
図
API名
本来アクセスしたいAPIのドメインを api.example.com
Proxyに向いているドメインを api.example.local
とする
各要素
WEB Servers
各WEBサーバーは、api.example.localにアクセスする
Reverse Proxy
api.example.localにきたアクセスを、api.example.comに変更する。
nginxの場合は以下のような設定になる。
server {
listen 80;
server_name api.example.local;
location / {
proxy_pass http://api.example.com;
}
}
proxy_set_headerはセットしないように注意。
DNS
.local系のドメインはinternalなDNSがあればそこに設定しても良いし(Route53なら作成可能)、/etc/hostsに書いておいても良い。
まとめ
という事で結構簡単に完成。
リバースプロキシは、internal ELBを使って2台以上にしておくと吉。