CloudFrontで、
・オリジンの設定
Origin Protocol Policy: Match Viewer
・Behavior
Viewer Protocol Policy: HTTP and HTTPS
とかやると、HTTPとHTTPS両方使えるわけですが、実はこんな制限があります。
https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html
[Match Viewer (ビューアーに合わせる)]: CloudFront は、ビューアーリクエストのプロトコルに応じて HTTP または HTTPS を使用してオリジンと通信します。ビューアーが HTTP と HTTPS の両方のプロトコルを使用してリクエストを行った場合でも、CloudFront がオブジェクトをキャッシュするのは 1 回だけです。
HTTPとHTTPSで同じ結果が返ってこないと駄目っすよと。
これブラウザで挙動確認していると全然気づかなくて、実際プロトコルごとに違う結果が返ってくるんですが、curlとかで余計なヘッダー入ってないやつでやると一つの結果しか返ってきません。
常時SSLをEC2側でやろうものなら、リダイレクトループをかますという悲しい現実。
なので、プロトコル単位でキャッシュを分けたいので、
Cache Based on Selected Request Headers
に
CloudFront-Forwarded-Proto
を追加します。
これでプロトコルごとに違うキャッシュになるはず・・・です。