Azure App Service のサイトを Cloudflare 経由でホストする際の注意点

自社のコーポレートドメインを Cloudflare の DNS 経由に変更しました。

それに伴い、自社のウェブサイトも Cloudflare でプロキシさせて配信することにしました。

自社のウェブサイトは Azure App Service にてホストしていますが、 Cloudflare 経由に切り替えた際にうまく切り替えができなかったので、その際の内容と注意点を公開します。

はじめに

Azure App Service のサイトを Cloudflare 経由でホストする際の注意点の前に、まずはCloudflareとは何か、そしてなぜこれが重要なのかを理解することが必要です。

Cloudflareは、サイトのセキュリティ強化、高速化、および信頼性向上を目的としたグローバルなCDN(コンテンツデリバリーネットワーク)サービス提供者です。Webトラフィックを最適化し、DDoS攻撃やデータ盗難といった脅威から保護する機能を備えています。

また、Cloudflareは、DNSサービスを通じてウェブサイトの可用性を高めるとともに、ユーザーに近いサーバーからコンテンツを提供することで、サイトのロード時間を短縮します。このような特長を持つCloudflareを経由してAzure App Serviceでホストされるサイトを運用することは、パフォーマンスとセキュリティの両方の観点で大きなメリットがあります。

しかし、Azure App ServiceのサイトをCloudflare経由でホストする際、いくつかの注意点があるため解説します。

Cloudflare を使用するための設定

細かい部分は公式サイトの利用開始ガイドに書いてあるため、ここでは詳しくは触れません。

今回は Cloudflare に対して自社ドメインでホストしているサイトを登録し、 Cloudflare DNS 経由で自社サイトをホストすることにしました。

万が一 Cloudflare がダウンした場合はサイトに接続不可となりますが、それは Azure であっても同様なので今回はあまり気にしないことにします。

Cloudflare でサイトを登録し、 DNS 関連の設定を行うと Cloudflare 経由で App Service でホストしているサイトにアクセス可能になります。

Cloudflare がプロキシする(Cloudflare経由でアクセス)状態になると、下記のような表示になります。

App Service のサイトにアクセスしてみる

DNSの情報が伝播するまで少し待ち、しばらくしてサイトにアクセスしてみます。

が、リダイレクトループ (ERR_TOO_MANY_REDIRECTS) が発生してうまくアクセスできません。

原因はHTTP/Sのリダイレクト

App Service はデフォルトで HTTP アクセスを HTTPS にリダイレクトする設定になっています。

App Sercice -> 対象のアプリ -> 左のブレード -> 構成 -> 全般設定 -> HTTPS のみ

また、Cloudflare の SSL/TLS 設定ではデフォルトで下記のように “フレキシブル” の設定になっています。

Cloudflare ダッシュボード -> 左のブレード -> SSL/TLS -> 概要

この設定ではイメージ図にもあるように、SSLのオフロードが Cloudflare で行われ、 Cloudflare からオリジン (今回は App Service) までの間は HTTP で行われます。

しかし、前述の App Service の “HTTPSのみ” 設定によって HTTP アクセスは HTTPS へとリダイレクトされるため、 HTTPS でアクセス -> Cloudflare でオフロード -> App Service へは HTTP でアクセス…
となり無限ループになっていたものと思います。

設定変更を行い再度アクセス

上記の事象に対して採れる案は
1. App Service の “HTTPS のみ” を解除して HTTP でのアクセスも許可する
2. Cloudflare 側でエンドツーエンドの暗号化 (つまりオリジンサーバーへのアクセスまで全てHTTPS通信) を有効化する
の2つの方法があると思いますが、 1 については App Service 自体のデフォルトドメイン (azurewebsites.net) は非公開にできないため、 HTTP アクセスを開放するのは避けたいところです。

そこで、 Cloudflare 側の SSL/TLS 設定を変更しオリジンまで HTTPS にすることで対応します。

先ほどの Cloudflare での SSL/TLS 設定で “フル(厳密)” を選択することで、 App Service で規定で付与されるマネージド証明書によって Cloudflare からオリジン間のアクセスも HTTPS として通信することができ、問題なくサイトを表示することができました。

(”フル” というのもありますが、これはどういうケースで使うのでしょうか。とりあえずオレオレ証明書みたいなのを入れたサーバー向けとかですかね。)

まとめ

  • App Service で Cloudflare を使うときは Cloudflare 側の SSL/TLS 設定で暗号化モードを “フル(厳密)” に設定しましょう。
  • よく調べてみたら公式のトラブルシューティングに書いてました。

弊社のご紹介

弊社ではAzure構築・アドバイザリーサービスを提供しております。

マイクロソフト出身、 Azure 認定資格を保持するエンジニアが Azure に関するアドバイスや、環境構築などのご支援をいたします。

また、マイクロソフトのAzureサポートとのやり取りも弊社にお任せいただけます。
サポート担当とのやり取りは、慣れていない場合適切な情報を引き出すことができず、連絡の往復が続き問題解決までに時間がかかることが多いです。

弊社のアドバイザリーサービスでは、弊社で回答できる部分は迅速に回答し、Azure内部の調査が必要な場合などはAzureサポートと連携して問題解決にあたることができます。

Azure をより活用し、最適な構成を構築するご支援をいたしますので、ご検討の方はお気軽にお問い合わせください。

「App Service」に関連する記事