GCPロードバランサでhttpリクエストをhttpsでリダイレクトする

この記事は約5分で読めます。
Warning: mkdir(): Read-only file system in /workspace/wp-content/themes/cocoon-master/lib/utils.php on line 1154 Warning: mkdir(): Read-only file system in /workspace/wp-content/themes/cocoon-master/lib/utils.php on line 1172 Warning: mkdir(): No such file or directory in /workspace/wp-content/themes/cocoon-master/lib/blogcard-out.php on line 111 Warning: file_put_contents(/workspace/wp-content/uploads/cocoon-resources/blog-card-cache/c193befae2b22183db2de37e2c6b61a9.png): failed to open stream: No such file or directory in /workspace/wp-content/themes/cocoon-master/lib/utils.php on line 1928

当ブログはAmazon アソシエイトを利用しているのですが、以下の理由で2回reject(却下)を食らっています。

登録サイト情報httpsアドレスで登録しているのに、なんでURLがhttpで登録されているんですか、Amazonさん??

  • Amazonアソシエイト サポートに問い合わせても、再度登録し直して下さいとのこと
  • 再登録しても上記理由でreject
  • どないなっとんねーんとAmazonアソシエイト サポートに回答を求めても、再度登録して下さいの一点張り
  • そうじゃなくて、どないなっとんねーんと回答を再度促したら応答がなくなりました(おいっ)

という具合で、ダメダメな対応です。

仕方ないのでシステム側で対応する事にしました。

GAE単体で当ブログを運用していた当時は、app.yamlでリダイレクトする記述を書けばよかったのですが、現在の当ブログはロードバランサとGAEを連携している構成なので、httpsリダイレクトはロードバランサ側で対応する必要があります。

イメージとしてはこんな感じになります。

スポンサーリンク

前提条件

HTTPSロードバランサとバックエンドサービスが既に設定済という前提となります。

(上記GIFアニメの③と④は設定済の状態)

httpリクエストが来た時に、httpsでリダイレクトする部分(上記GIFアニメの①、②の箇所)の設定手順が当記事の内容となります。

スポンサーリンク

httpsリダイレクト用の設定ファイルを作成(yaml)

参考情報をみて知ったのですが、ロードバランサの設定情報について、yamlファイルに定義、インポートが可能なようなので、試してみます。

kind: compute#urlMap
name: 【URLMap名】
defaultUrlRedirect:
  redirectResponseCode: "MOVED_PERMANENTLY_DEFAULT"
  httpsRedirect: True

httpsでリダイレクトを指示しているだけのシンプルな内容です。

なお、yamlファイルのサンプルは、【CloudSDKインストールディレクトリ】/lib/googlecloudsdk/schemas/compute/v1/UrlMap.yamlにあります。

スポンサーリンク

httpsリダイレクト用のURL Mapの作成

Cloud SDKコマンドでhttpsリダイレクト用のURL Mapを作成をします。

gcloud compute url-maps import 【URLMap名】 \
  --source path/to/前述で作成した設定ファイル.yaml \
  --global

作成されたhttpsリダイレクト用のURLマップをConsoleで見ると下記のようになっていました。

yamlファイルのredirectResponseCodeの記述内容により、レスポンスコードを変えれるみたいです。

このあたり、公式Docに情報がなかったので、反映されれば追記しようと思います。

スポンサーリンク

ターゲットhttpプロキシを作成しhttpsリダイレクト用URL Mapに追加

httpプロキシを作成し、前述で作成したhttpsリダイレクト用のURLMapへ追加します。

クライアントへhttps付きURLを返すだけなので、バックエンドの指定は不要です。

gcloud compute target-http-proxies create 【httpプロキシ名】 \
  --url-map=【前述で作成したhttpsリダイレクト用のURLMap名】 \
  --global
スポンサーリンク

フロントエンド(forwarding rule)を作成

フロントエンド(転送ルール)の設定です。

httpリクエストを受けるのでポートは80で指定します。

gcloud compute forwarding-rules create 【フロントエンド名】 \
  --target-http-proxy=【前述で作成したターゲットプロキシ名】 \
  --address=【ドメインのAレコードに紐づくIPアドレス】 \
  --ports=80 \
  --global
スポンサーリンク

動作確認

ロードバランサの設定反映に少し時間がかかりますが、数分待てば完了します。

(1〜2分ほどで反映されると思います)

curlでhttpsリダイレクトしているか確認します。

curl -s -D - -o /dev/null http://yamavlog.com
                                                                                            
HTTP/1.1 301 Moved Permanently
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Referrer-Policy: no-referrer
Location: https://yamavlog.com/
Content-Length: 218
Date: Thu, 10 Dec 2020 09:27:48 GMT

上手くいきました。

スポンサーリンク

まとめ

ロードバランサの知識が増えたということで良しとします。

参考にさせて頂いたサイトの運営者様、ありがとうございました。

スポンサーリンク

参考情報

従来のアプリケーション ロードバランサに HTTP から HTTPS へのリダイレクトを設定する  |  負荷分散  |  Google Cloud
従来のアプリケーション ロードバランサに HTTP から HTTPS へのリダイレクトを設定します。
スポンサーリンク
GCP
ヤマログ
タイトルとURLをコピーしました