リア充爆発日記

You don't even know what ria-ju really is.

Railsでhttpsでアクセスしてもrequest.urlがhttpを返してきてしまう場合

ロードバランサーSSL/TLSのデコードを行う場合、ブラウザのアドレスバー的にはhttpsでもアプリからみるとhttpなのでrequest.urlとかimage_urlとかがhttpで返してきて都合が悪かったりする場合の話。

このあたりはRailsというかRackの処理になっていて、たぶんここで決まるんだと思う。
https://github.com/rack/rack/blob/master/lib/rack/request.rb#L66

で、冒頭のケースは、最初のif文を抜けちゃうケースだと思うんだけど、2つめの条件である、HTTP_X_FORWARDED_SSLで引っ掛ければうまくいきそうだ。
なのでapplication_controllerとかのbefore_actionでrequest.env['HTTP_X_FORWARDED_SSL'] = 'on'とかやっとけば後続の処理はhttpsとして捉えてくれる。

そういや、AWSのRoute53だとこういうこと起きないなと思ったら、AWSのRoute53でデコードするとHTTP_X_FORWARDED_SSL: onつけてくれてたからだね。