#対応にあたる経緯
CLBを利用している場合、定期的にCLBのエンドポイントから名前解決されるIPアドレスが変わってしまい、VPN経由でアクセスをしている場合に、
毎回VPNの経路申請をして変えてもらう必要があったため、IPアドレスが変わらないようにしたいということで対応にあたった
#対応手順
- 本番プロキシサーバのAMIを取得し、それよりNLB用にプロキシサーバ起動
- Multi-AZで動作していて欲しいので、2台起動
- 起動後、これまでのプロキシサーバはSSL TerminationしていないHTTP(80)でリクエストを受けていたので、
/etc/nginx/conf.d/XXXX.conf
を作成して、下記のnginxの設定に記載したように設定してnginx再起動-
nlb.XXXX.jp
はテスト用でドメインつけて動作テストしました。
-
- NLBを作成します。
- ここで紐づけるAZとサブネット、Elastic IPを確認します
- サブネットはGIPを持たせるため、Public Subnetである必要あり
- AZは1つでも複数でも可能でしたが、一度作成すると変更できないので、再作成が必要になるようでした
- ここで紐づけるAZとサブネット、Elastic IPを確認します
- TCP:443(HTTPS)でリスナー作成。
- リスナーの転送先のターゲットグループを作成。
- ここで、NLBにぶらさげるインスタンスを選択してもらいます。
- ※注意点は「対応してるインスタンスタイプが少ない」ので、インフラ費用が上がるのは覚悟しましょう (今回は c3.large を選択しました。)
- ヘルスチェックはTCPで行われます。
- ポートは「ターゲットグループで選択したポート」か「上書き」ができるようです。
- 正常と非正常の閾値、タイムアウトとチェック間隔を設定してください。
- ※注意点1:NLBにはセキュリティグループがありません。そのため、ぶらさげたEC2のセキュリティグループでアクセス制限をします。
- ※注意点2:NLBからのヘルスチェックされるときに、アクセス元が該当サブネットのCIDRとなるので、EC2のセキュリティグループでそれを許可する必要あり
- Route53にて、NLBのDNS名を
nlb.XXXX.jp
のAレコードのAliasとして登録 -
nlb.XXXX.jp
へアクセスして動作確認 - 特に問題ないようであれば、Route53にて、
www
の方の名前解決先をNLBのエンドポイントに変更して保存 - ※注意点:DNSキャッシュされている人が変更前のELB経由でアクセスしてるようなので、そこへのリクエストがなくなるまでは両方動くようにしておきましょう。
##nginxの設定
/etc/nginx/conf.d/XXXX.conf
server {
listen 443;
server_name nlb.XXXX.jp www.XXXX.jp;
root /opt/XXXX/public;
charset utf-8;
access_log /var/log/nginx/access_443.log main;
# NLB変更により、EC2でSSL Terminationすることになるので、SSLの設定内容を追加してます
ssl on;
ssl_certificate /etc/pki/tls/certs/XXXX.pem;
ssl_certificate_key /etc/pki/tls/certs/XXXX.key;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
#favicon
location ~ \.ico$ {
log_not_found off;
access_log off;
expires 7d;
}
#healthceck
location /health_check.html {
access_log off;
}
# static
location /assets {
access_log off;
proxy_cache cache_space;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
}
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
location / {
proxy_pass http://XXXXXXX-XXXXXXX-XXXXXXX-XXXXXXXX.ap-northeast-1.elb.amazonaws.com$request_uri;
client_max_body_size 50M;
client_body_buffer_size 128k;
client_body_temp_path /dev/shm/nginx_client_body_temp;
# アップストリームサーバからのレスポンスバッファリングwarning削減。
proxy_buffering on;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 1024m;
proxy_temp_path /dev/shm/nginx_proxy_temp;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
error_page 404 /404.html;
location = /40x.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
#参考資料