Apache-(http)-ALB-(http)-ECS(rails)の多段構成のときに、X-Forwared-Protoヘッダを設定していても、HTTP Origin header didn't match request.base_url と言われる
諸事情で多段構成の場合
client-(https)-Apache-(http)-ALB-(http)-ECS(rails)
Apacheでssl終端する
httpsからhttpへプロキシする場合、よくあるX-Forwared-Protoヘッダを設定する方法だとPOSTが失敗してしまう
HTTP Origin header (https://example.com) didn't match request.base_url (http://example.com)
RailsのPOSTでCSRF TokenがVerifyできないときに確認したいこと - Qiita
Rails5 | tackeyy.com
Apach, NginxをプロキシにしたRailsアプリでhttpsがリダイレクト時にhttpになる問題 - Qiita
途中のALBがX-Forwared-Protoヘッダを上書きして、httpがセットされてしまうため
AWS上のWordPress常時SSL化に関するメモ - 私事ですが……
Application Load Balancerの細かい挙動をチェックしてみた – サーバーワークスエンジニアブログ
ELBが付与するものとして、X-Forwarded-for(ELBにリクエストを発行したホストのIPアドレス)、X-Forwarded-Proto(接続元からのリクエストを受け付けたELBのプロトコル)、X-Forwarded-Port(同ポート)、あとはHostヘッダ(これはリクエスト元からキャリーオーバーされているもの)あたりです。
railsだとX-Forwared-Proto以外に以下のXヘッダを見てsslか判定してくれるので、
railsでssl設定をした場合にしておいた方がいい設定 - mikami's blog
Nginx のリバースプロキシ設定のメモ - Qiita
X_FORWARDED_SSL = on
X_FORWARDED_SCHEME
apache側で設定したら動いた
code: ssl.conf
<VirtualHost *.443>
(省略)
RequestHeader set X_FORWARDED_SSL 'on'
(省略)
</VirtualHost>
CloudFront - ALB - EC2の構成が参考になった
CloudFrontの場合、CloudFront-Forwarded-Protoという独自ヘッダがつけられる
AWS CloudFront CloudFront で HTTPS リクエストを受け付けた場合に X-Forwarded-Proto をちゃんとアプリケーションに渡すには? - Qiita
CloudFront-Forwarded-Protoヘッダを使ってCloudFrontへの通信プロトコルをオリジン側で確認してみた | Developers.IO
CloudFront配下にRailsを置いたときにSSL対応するMiddleware - あおみかんのブログ