前提・実現したいこと
ネットワーク・セキュリティ初心者です。
nginx + unicorn + sinatra で作成したアプリを AWS Fargate 上で動作させております。
アプリケーションロードバランサーを利用してドメイン名でのアクセスと、
HTTPSでのSSL通信を実現したいと考えておりますが、以下の現象が発生してしまいます。
どなたか原因・解決方法についてお知恵をお借りできませんでしょうか?
よろしくお願いします。
発生している問題・エラーメッセージ
1.ECSのサービスを実行しタスクがRUNNINGになった状態で、https://www.{パブリックドメイン}(例: https://www.example.com)にアクセスすると、「502 Bad Gateway」が表示される
(http://{タスクのパブリックIP}にアクセスすると、正常にページが表示される)
2.ECSのサービス実行後、ヘルスチェックがミスを起こし、タスクのステータスがすぐに'STOPPED (Task failed ELB health checks in 〜)'になる
環境構築状況
SSL証明書
・ 東京リージョンで、 *.{パブリックドメイン} の証明書を発行済み
アプリケーションロードバランサー
・ ロードバランサーの設定
* スキーム:インターネット向け
* IP アドレスタイプ:ipv4
* リスナーのプロトコル - ポート: HTTPS - 443
・ セキュリティ設定の構成・セキュリティグループの設定
* 証明書タイプ:上記SSL証明書
* 証明書の名前:*.{パブリックドメイン}
* セキュリティポリシー: ELBSecurityPolicy-2016-08
・ ルーティングの設定
* ターゲットグループ: 新規作成
* ターゲットの種類: IP
* ターゲットグループのプロトコル - ポート: HTTPS - 443
* ヘルスチェックのプロトコル - パス: HTTPS - /
* ヘルスチェックの詳細設定: デフォルト
DNS ホストゾーン
・下記レコードを登録
* Aレコード { www.{パブリックドメイン} : ALBのドメイン名(エイリアス) }
* SSL証明書DNS検証用のCNAMEレコード
* NS,SOAレコード は初期設定値
ECS
・タスク定義
* タスクロール:なし
* ネットワークモード:awsvpc
* 互換性が必要:FARGATE
* タスク実行ロール:ecsTaskExecutionRole
* タスクメモリ (MiB):512
* タスク CPU (単位):256
* コンテナ定義
- メモリ制限 (MiB):ソフト制限 128
- ポートマッピング:80 tcp, 443 tcp
- 他は、コンテナ名、イメージ、環境変数以外初期設定
* その他は初期設定
・クラスター
* クラスターテンプレート:ネットワーキングのみ
・サービス
* キャパシティープロバイダー戦略
- キャパシティープロバイダ:FARGATE_SPOT
* サービスタイプ:REPLICA
* タスクの数:3
* 最小ヘルス率:100
* 最大率:200
* デプロイメントタイプ:ローリングアップデート
* ネットワーク構成
- パブリック IP の自動割り当て:ENABLE
* ロードバランシング
- ロードバランサー名:上記ロードバランサ
- ロードバランス用のコンテナ: [定義したコンテナ名] : 443
- ターゲットグループ名:上記ターゲットグループ
- プロダクションリスナーポート: 443:HTTPS
- プロダクションリスナープロトコル: HTTPS
- ターゲットグループのプロトコル:HTTPS
- ターゲットの種類:ip
* サービスの検出:なし
* Auto Scaling:サービスの必要数を直接調整しない
unicorn.rb
ruby
1@dir = "/app/" 2 3worker_processes 2 4working_directory @dir 5 6timeout 300 7listen "#{@dir}tmp/unicorn.sock", backlog: 1024 8 9pid "#{@dir}tmp/pids/unicorn.pid"
nginx.conf
user root; worker_processes 2; events { worker_connections 768; } http { upstream unicorn_server { server unix:/app/tmp/unicorn.sock; } server { listen 80; listen 443 ssl; server_name www.{パブリックドメイン}; root /app/static; location / { if (!-f $request_filename) { proxy_pass http://unicorn_server; break; } } } }
回答1件
あなたの回答
tips
プレビュー