【Google Cloud Storage】静的ウェブサイトのhttp→httpsリダイレクトを行う

google cloud platform

今行っている開発プロジェクトではシングルページアプリケーションを作っています。

google cloud storageを使ってindex.htmlを返すようにしているのですが、http→httpsへのリダイレクト方法に迷い会社の先輩に相談して解決しました。その方法をメモします。

 

先に結論

Javascriptにhttp→httpsリダイレクトの処理を記述しました。

 

構成図

f:id:yfp5521:20180627112037p:plain

 

経緯

今回はロードバランサを経由してcloud storageから静的コンテンツを返すようにしています。

ロードバランサには証明書を置いているためhttpsにはなっているのですが、http→httpsのリダイレクトはロードバランサではできないようでした。

一般的にはnginxを建てて設定ファイルを編集してリダイレクトすると思います。しかしリダイレクトのためだけにnginxを建てるのはもったいないので、他のリダイレクト方法を探していました。

 

解決策

最初に読み込まれるファイルにjsのリダイレクト処理を記述しました。

if (process.env['NODE_ENV'] === 'production') {
  if (location.protocol !== 'https:') {
    location.href = 'https:' + window.location.href.substring(window.location.protocol.length)
  }
}

 NODE_ENVを確認して本番環境ならリダイレクト処理をかけます。

これでhttp→httpsのリダイレクトが行われます。

 

 

問題点

Javascriptを書くだけなので簡単ですが、問題点があります。

それはAnalyticsでの解析がおかしくなってしまう点です。今回のプロジェクトはあまり関係なかったので良かったのですが、できるだけサーバーサイドでリダイレクトするのが無難なようです。

nginxとかを建てず、とにかく静的コンテンツのみ扱いたい場合はJavascriptで書くのがいいかもしれません。

下記リンクにJavascriptでのAnalytics対応方法が書いてあります。

 

<参考>

qiita.com

 

 

その他

できればgoogleのロードバランサで自動リダイレクト処理をしてくれると助かります。

下記のgoogle cloud platformのユーザーの意見板を見る限りはまだ対応していないようです。(2018/06/27現在)

ユーザーの声に対して賛成投票(vote)ができるようなので、投票が増えると検討してくれそうです。

googlecloudplatform.uservoice.com