Azure Web アプリ で、Apache 仮想ホストのようなサブドメインの定義

2016/08/17
★★★

Apache では、以下のように、httpd.conf で、サブドメイン単位で、仮想ホストを定義でき、ドキュメント ルートも同単位で定義できる。

# vi /etc/httpd/conf/httpd.conf
<virtualHost *:80>
ServerName <サブドメイン 1>.<ドメイン名>
DocumentRoot /var/www/html/<サブドメイン 1>
</virtualHost> <virtualHost *:80> ServerName <サブドメイン 2>.<ドメイン名> DocumentRoot /var/www/html/<サブドメイン 2> </virtualHost>

Azure の Web アプリで同様のことを実現する方法を記載する。

まず、DNS の設定を変更する。

お名前.COM を利用の場合は、[ネームサーバーの設定] - [DNS関連機能の設定] を選択、該当ドメインを選択し、[次へ進む] - [DNSレコード設定を利用する] を選択し、[DNSレコード設定] 画面から、各レコードの設定を行う。
その他のドメイン レジストラーを利用の場合は、それぞれの方法に従う。

以下の CNAME, A レコードをそれぞれ作成する。

ホスト名: awverify.<サブドメイン 1>.<ドメイン名>
TYPE: CNAME
TTL: 任意
VALUE: awverify.<Web アプリ名>.azurewebsites.net

ホスト名: <サブドメイン 1>.<ドメイン名>
TYPE: A
TTL: 任意
VALUE: [Web アプリ] - [カスタム ドメインおよび SSL] - [外部ドメインの使用] - [A レコードの構成時に使用する IP アドレス] に表示されている IP アドレス

http://digwebinterface.com/ から、[Hostnames or IP addresses] へ対象の FQDN: <サブドメイン 1>.<ドメイン名> を入力し、[Dig] を選択し、A レコードに対する IP アドレスに解決されることを確認する。

[Web アプリ] - [カスタム ドメインおよび SSL] - [外部ドメインの使用] - [ドメイン名] 一覧の末尾に、対象の FQDN: <サブドメイン 1>.<ドメイン名> を入力し、[保存] を選択する。

次に、仮想アプリケーションを定義する。
一度、サブディレクトリに、仮想アプリケーションを定義し、その後、サブドメインへの要求を URL Rewrite で同サブディレクトリへリライトする。

[Web アプリ] - [アプリケーション設定] - [仮想アプリケーションとディレクトリ] 一覧の末尾に、サブディレクトリへの要求に対するアプリの定義を行う。
仮想ディレクトリ: <サブドメイン(任意)>、サイトルートを基準とした物理パス: site\wwwroot\<サブドメイン(任意)>

次に、URL Rewrite により、サブドメインへの要求をサブディレクトリへリライトする。
Azure Web アプリの site\wwwroot 上に web.config が存在しなければ、新規にファイルを作成、存在する場合は、既存のファイルにリライトの定義を追記する。
定義は、以下の通り。

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="<ルールの名称>" stopProcessing="true">
<match url="^(.*)$" />
<conditions>
<add input="{HTTP_HOST}" pattern="<サブドメイン>.<ドメイン名>" />
</conditions>
<action type="Rewrite" url="<サブドメイン>/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

conditions 要素で、HTTP_HOST ヘッダーに、<サブドメイン>.<ドメイン名> が指定されている場合としている。
この場合に、要求を <サブドメイン>/{R:1} にリライトする。
{R:1} は、当初に要求された相対 URL を指す。
つまり、aaaaa.bbbb.net/index.html の要求は、aaaaa.bbbb.net/aaaaa/index.html にリライトされる。