状況
CloudFront →(SSL)→ ALB → EC2 → RDSのような構成で502エラーが発生しました。
原因
CloudFrontで502が発生する原因は様々ありますが自分のケースではCloudFrontのビヘイビアタブのキャッシュキーとオリジンリクエストの設定が初期設定のままというのが原因でした。
キャッシュキーとオリジンリクエスト
CloudFrontのコンソールからビヘイビアタブを開くと「キャッシュキーとオリジンリクエスト」という項目があります。
ここで何を設定しているかというとHTTP通信でやりとりされるクッキーやクエリ文字列などの情報をCloud Frontに保存するかどうかという設定を行なっています。これらの設定をすることで通信処理によっては表示速度を速められたりします。
設定
前提として今回はパスパターンがデフォルト(*)の設定を行います。
つまり全てのファイルに適用されるものですので当然PHPなどの
動的なプログラムファイルも含まれます。
以下実際に適用した設定になります。
「Cache policy and origin request policy」にチェックを入れます。
キャッシュポリシーの項目は「CachingDisabled」を選択します。
これで全ての通信はキャッシュされなくなります。
オリジンリクエストポリシーの項目は「AllViewer」を選択します。
キャッシュポリシーはどのくらいの期間データを保存するかを設定し
オリジンリクエストポリシーはどのようなヘッダを含んでオリジンに送信するかを設定しています。
備考
ちなみに上記はPHPファイルなどを含む全てのファイルに対しての基本設定です。この基本設定の他に*.jpgなどの静的ファイルごとにキャッシュをする設定を加えることでCloudFrontにファイルを保存し、表示を高速化することができます。
参考
キャッシュポリシーの公式ドキュメント
オリジンリクエストポリシーの公式ドキュメント
ちなみにその他の原因で502が返ってくることも少なくないようです。
CloudFrontからの502を解決するー公式ドキュメント