質問: "/app/" worker_processes 2 working_directory @dir timeout 300 listen "#{@dir}tmp/unicorn.sock", backlog: 1024 pid "#{@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; } } } } ```
回答: 結論 ALBとnginx間の通信がエラーになっています。 以下の3設定を「HTTPS:443」→「HTTP:80」に変更すればOKです。 * [ALB] ターゲットグループのプロトコル * [ALB] ヘルスチェックのプロトコル * [ECS] ロードバランス用のコンテナ 詳細 ブラウザ→ALB→nginx→unicorn の順にアクセスが発生しますが、現状の構成では「ブラウザ→ALB」の箇所でしかHTTPSが有効に機能しません。 HTTPS通信には証明書が必要となるものの、AWS ACMで発行した証明書はALBにしか適用されておらず、nginxには証明書が入っていない状態です。 ALB→nginxでHTTPS通信が行えないために、ALBが502エラーを返しています。 ALB→nginxの通信をHTTP:80へ変更することにより、アプリケーションへのアクセスおよびヘルスチェックが通るようになります。 HTTPS通信をALBまでに留めておき、ALBより後ろの内部通信にはHTTPを用いる構成が一般的です。詳しく知りたい場合は「SSL Termination」などで調べてみて下さい。