Azure App Serviceをリバースプロキシとして利用する #Azureリレー
2020-09-23
azblob://2022/11/11/eyecatch/2020-09-23-app-service-reverse-proxy-000.jpg

こんにちは。cloud.config Divの神田です。
前回の山本さんに引き続きAzureリレーのバトンを受け取ったので書いていきます。

今回は備忘録として、Azure App Serviceをリバースプロキシとして利用する方法を紹介します。

今回の目標

今回はApp ServiceとFunctionsを作成し、App ServiceにアクセスしたらURL RewriteによりFunctionsに転送させる動作を実現させます。

App ServiceとFunctionsを作成する

まずはApp ServiceとFunctionsを作成します。
デフォルトの状態でそれぞれのアプリにアクセスすると以下の画面が表示されます。

App Serviceのデフォルトページ
Functionsのデフォルトページ

App Serviceのプロキシ機能を有効化する

デフォルトではApp Serviceのプロキシ機能は無効化されているので、
こちらを有効化します。
まずはApp ServiceのデプロイセンターからFTPのダッシュボードにアクセスします。
表示される認証情報をWinSCPに入力して接続します。
※App Serviceの[構成]>[全般設定]から[FTPの状態]を許可しておく必要があります。(デフォルトではすべて許可になっているので問題ないはずです)
※WinSCPは https://winscp.net/eng/download.php よりダウンロード可能です。

FTPのデプロイセンター
WinSCPの接続画面

接続に成功したらApp Serviceの /site 配下に下記の内容の applicationHost.xdt ファイルを配置します。

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.webServer>
    <proxy enabled="true" xdt:Transform="Insert" />
  </system.webServer>
  <location path="<リバースプロキシとして利用するAppServiceのリソース名>" xdt:Locator="Match(path)">
    <system.webServer>
      <rewrite xdt:Transform="Insert">
      </rewrite>
    </system.webServer>
  </location>
</configuration>

applicationHost.xdt ファイルを配置したら一度App Serviceを再起動します。
これでApp Serviceのプロキシ機能の有効化が完了しました。

URL Rewriteの設定

続いてURL Rewriteの設定を行います。
Azureポータルから[App Service Editor(プレビュー)]にアクセスし、
App Serviceの /site/wwwroot 配下に下記内容の web.config ファイルを配置します。

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
		<rule name="Proxy" stopProcessing="true">
		  <match url="^(.*)" />
		  <action type="Rewrite" url="<URL Rewriteでの転送先のURL>"/>
		</rule>
	  </rules>
	</rewrite>
  </system.webServer>
</configuration>

以上でApp Serviceをリバースプロキシとして利用するために必要な設定が完了しました。

動作確認

App ServiceのURL(リソース名.azurewebsites.net)にアクセスすると、
App Serviceのデフォルトのページではなく、Functionsのデフォルトページが表示されます。
※アドレスバーのURLはApp Serviceのものですが、表示されるページはFunctionsのものとなっています

リバースプロキシを構成したあとのアクセス結果

最後に

以上でApp Serviceにアクセスした際に、URL RewriteによりFunctionに転送させる動作を実現できました。
今回の設定はApp Serviceで利用されているデプロイエンジンである「Kudu」の「Xdt Transform」という機能を利用したものです。
下記のURLに他の利用法のサンプルが紹介されているので、気になる方は確認してみてください。

Xdt transform samples
https://github.com/projectkudu/kudu/wiki/Xdt-transform-samples