ぬまのどろ

namazuのゆるい日記。 ゆるり更新。

RackとかRailsでリダイレクトとかがhttpsにならないとき

今日したこと

  • いろいろ

短文技術エントリは手抜き。

nginx => railsとかでhttpsをraislに飛ばすときに解く

よくある構成だとおもう。 フロントのWebサーバまではHTTPSで飛ばして、最後のRailsにはHTTPでReverseProxyするってやつ。

そのときにHTTPヘッダをちゃんとNginxで設定しないとRails側がHTTPSで来た通信だということを認識しなくてうまく動かないのはよく知られた話。 X_Forwared_Proto htttps; とかはちゃんと書こうなって記事に引っかかる。

で。 これで引っかかった。 ちゃんと書いていたのにHTTPSと認識されなかったのは謎。

今回の問題は、 GoogleOmniauthのリダイレクトURLが何故かHTTPになってしまうということ。

コードを漁っていったら、Rackのschemeからhttpsかhttpかを取得していた。

このschemeの部分を見ていたらRails(Rack)がHTTPSできた通信かHTTP出来た通信か調べてるのがわかった。

def scheme
        if get_header(HTTPS) == 'on'
          'https'
        elsif get_header(HTTP_X_FORWARDED_SSL) == 'on'
          'https'
        elsif get_header(HTTP_X_FORWARDED_SCHEME)
          get_header(HTTP_X_FORWARDED_SCHEME)
        elsif get_header(HTTP_X_FORWARDED_PROTO)
          get_header(HTTP_X_FORWARDED_PROTO).split(',')[0]
        else
          get_header(RACK_URL_SCHEME)
        end
end

Rack schmeのここの部分だった。 これでhttpsか判断してるっぽい。 X_FORWARDED_PROTOなどなんかうまくいかなかったので、このコードにしたがって、Nginxで。。。

proxy_add_header X_FORWARDED_SSL on;

みたいにやったら、HTTPSと認識してくれて良しなに動いた。

どうでもいいはなし

  • 某所の電源がぶつぶつ切れる問題。 接続しているUPSのバッテリー切れが原因っぽかった。 対応したのでこれでいけるといいにゃぁ。
  • ストロングゼロ2本だと飛べないのでつらいね。