表題の通りのエラーが出たので対応内容メモ。
環境
- サーバーは2台
- 1台はnginxリバースプロキシ用Webサーバー
- httpsアクセスを受け付け、ローカルネットワーク上のrailsにhttpで転送してる
- もう1台はrailsアプリケーション用(DBとか含む)
- nginxからhttpで接続される
- 1台はnginxリバースプロキシ用Webサーバー
現象
ブラウザでアクセスするとURLの横に下記メッセージが出てた
さらにブラウザのコンソールを開くと下記エラーが残ってる
Mixed Content: The page at 'https://unityroom.com/games' was loaded over HTTPS, but requested an insecure stylesheet 'http://fonts.googleapis.com/css?family=Open+Sans:300,400,700'. This request has been blocked; the content must be served over HTTPS.
HTTPSのURLに接続してるのにHTTPのURL読み込もうとしてるから危険だよ!!ってやつですね。
現状
Rails側の実装はこんな感じ
application.html.slim
/! Web Fonts link[rel="shortcut" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans:400,300,600&subset=cyrillic,latin"]
CSSテンプレートをそのまま使ってるんだけど最初からこんな感じで書かれてた。
//
で始めると自動的にhttp
かhttps
を選択して出力してくれるんだろうな、たぶん。
対応1(失敗)
そんならhttps
って書いちゃえばいいじゃない。ってことで、Rails側を修正
- Rails.env.development? link[rel="shortcut" type="text/css" href="http://fonts.googleapis.com/css?family=Open+Sans:400,300,600&subset=cyrillic,latin"] - else link[rel="shortcut" type="text/css" href="https://fonts.googleapis.com/css?family=Open+Sans:400,300,600&subset=cyrillic,latin"]
staging
やproduction
(development
以外)はhttps
接続できる様にサーバー構築済みなのを利用したごり押し。
対応1の結果
同じエラーが出る。ダメだった。
htmlのソース見るとちゃんとhttps
になってるのに・・・なんで。
対応2(案)
nginxの設定とかでrails側が//
から始まるURLでちゃんとhttps
を返すようにできるんじゃないかな。
調査中だけど時間ぎれなので続きはまた。