本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「Azure App Serviceをリバースプロキシとして利用する #Azureリレー」を再編集したものです。
こんにちは。cloud.config Divの神田です。
今回は備忘録として、Azure App Serviceをリバースプロキシとして利用する方法を紹介します。
今回の目標
今回はApp ServiceとFunctionsを作成し、App ServiceにアクセスしたらURL Rewriteにより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よりダウンロード可能です。
接続に成功したら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"
> </proxy
> </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
> <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
神田 仁/FIXER
cloud.config Division所属
Azureを用いたインフラ構築を行っています。構築のノウハウやTerraformを用いた効率化の方法などを紹介していけたらいいな。