【Google Cloud Storage】静的ウェブサイトのhttp→httpsリダイレクトを行う
今行っている開発プロジェクトではシングルページアプリケーションを作っています。
google cloud storageを使ってindex.htmlを返すようにしているのですが、http→httpsへのリダイレクト方法に迷い会社の先輩に相談して解決しました。その方法をメモします。
先に結論
Javascriptにhttp→httpsリダイレクトの処理を記述しました。
構成図
経緯
今回はロードバランサを経由して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対応方法が書いてあります。
<参考>
その他
できればgoogleのロードバランサで自動リダイレクト処理をしてくれると助かります。
下記のgoogle cloud platformのユーザーの意見板を見る限りはまだ対応していないようです。(2018/06/27現在)
ユーザーの声に対して賛成投票(vote)ができるようなので、投票が増えると検討してくれそうです。
Allow HTTP to redirect to HTTPS automatically
googlecloudplatform.uservoice.com