WebApp、OSがWindowsとLinuxで設定回りに差があるうえに
割と纏まったやりたい設定が見つからない…
そんなことがあるので纏めてみました。
なお、Linux版はこちら
※一部Linux版と項目をかぶらせています
目次
想定環境
作成は以下で行きます
・公開はコード(Dockerコンテナは使用しない)
・ランタイムスタックはPHP 7.3
・OSはWindows
・アップロードはFTPで実施
・URLリダイレクト有り
・Basic認証有り
・カスタムドメイン有り
・DNSはAzureDNSを使用
・証明書はなし
・WAFはなし
・表示するサイト自体はHaloWorldが表示される程度の簡単なhtml
WindowsのWebApp
まずコンテナを作りますが、コンテナを作るにあたっては当サイト内でも記事がありますので割愛
一応設定は以下にしてます
プロジェクトの詳細
リソースグループ :somane-app
インスタンスの詳細
名前 :somane-ewb
公開 :コード
ランタイムスタック :PHP 7.3
オペレーティングシステム :Windows
地域 :Japan East
サイズ :Standard S1
コンテンツのアップロード
# Linux版の記事と同じ内容となってます
ほかの手段もありますが今回はFTP
1.CloudShell起動
シェル用のストレージディスクを指定して作成する場合は最初からちゃんと指定して間違えずに作成
今回は別件で作成済みなのでマウントされた状態です

2.FTPユーザ作成
以下実行
az webapp deployment user set --user-name shftproot --password ********

3.FTPユーザ名確認
実行したらWebAppの FTP/デプロイユーザ名 のところに今入れたユーザが入ってます
下のFTPホスト名とFTPSホスト名も表示

4.FTP接続
FTPソフト開いて以下入れます
今回はWinSCPを使用
ファイルプロトコル :FTP
暗号化 :暗黙のSSL/TLSの暗号
ホスト名 :FTPSホスト名のFQDN部分
ユーザ名 :ポータルに表示されている FTP/デプロイユーザー名
パスワード :CloudShellで入れたパスワード

5.アップロード
コンテンツをアップロードします
ファイルの格納先は /site/wwwroot になります

6.とりあえずは index.html として HaloWorld!! のファイルを入れたのでそれが見えてます

カスタムドメインの登録
# Linux版の記事と同じ内容となってます
ここら辺はまだポータルだけからできますのでわかりやすいんですが一応
1.まずAzureDNSを作ります

2.デプロイができたら取得しておいたドメインでグローバルの名前解決ができるように設定
これに関してはサービスで異なると思うので割愛

3.WebAppでカスタムドメイン名を選択して「カスタムドメインの追加」

4.カスタムドメイン名にDNSに紐づけたドメイン名を入力
なおこれはwww無しになります

5.検証を押すとドメイン所有権が赤!になってると思うので表示されているTXTレコードとAレコードををDNS側に入力

6.AzureDNSだとこんな感じ

7.カスタムドメインでもう一度検証を押すとFQDNとDNS、両方が読み取れていれば緑チェックになるのでカスタムドメインを追加

8.カスタムドメインとして追加されます
今回はSSL証明書は取得しないので赤!のまま

9.なおwww.付きが必要な場合は同じようにwww付きでドメインを登録します

10.同じようにDNS追加要求が出るので同じように追加してwww付きのURLも登録

11.追加されました

BASIC認証の設定
ここら辺から情報が散らばってるので纏め…
まずWindowsの場合はIISなのでIISの基本認証を使用することになります
なお基本認証なのですが、WebApp単体だと必要なDLLがないのでかけれません
てことで…
以下、DLLを公開されている方がおられますのでこちらを使用
https://github.com/nabehiro/HttpAuthModule
PHPResources 配下のファイルをダウンロードします
素直にGit Bashで落としたほうがいいので全部ダウンロード
$ git clone https://github.com/nabehiro/HttpAuthModule.git

.\WebAppIISBasic\HttpAuthModule\PHPResources
にダウンロードした .\HttpAuthModule\PHPResources 配下のファイルを以下のように配置
/ ┐ ├ APS.NET ├ LogFiles └ site ┬ deployments ├ locks ├ repository └ wwwroot ┬ bin ─ HttpAuthModule.dll ├ index.html └ web.config

一応このままで動きますが
<!-- [required if http auth on] user1:pass1;user2:pass2;... --> <add key="Credentials" value="hoge:hogepass;foo:foopass;"/>
ここにパスワードが入っていますのでここを使用するものに変更
以上です
なお、このままだと全部のフォルダにベーシック認証がかかるため
「一部ページだけベーシック認証にしたい」
という場合に動作しません
こちらに関してはweb.config内でコメントアウトされている以下、add key をいじればいけます
<!-- [optional] If set, specified pattern url requests are skipped by http auth and IP Restriction. --> <!-- <add key="IgnorePathRegex" value="^/Home/Ignore$|^/Ignore\.aspx$|^/Content/"/> -->
ここに記載されたパスのみにベーシック認証がかかるため
<add key="IgnorePathRegex" value="^(?!/test)"/>
こう記載すると/test 配下のみにベーシック認証をかけることができます
URLリダイレクトの設定
これは内容としてはWeb.configを弄るだけです
設定自体は普通のIISと全く同じなので、なんなら適当に通常WindowsのIISを立て
RewriteModuleを突っ込んで設定
そこで出力されたweb.configをそのまま持ってくるのが楽かもしれません。
参考:RewriteModule(IIS10用)
https://www.iis.net/downloads/microsoft/url-rewrite
なお、ベーシック認証を行っている場合はそれもweb.configファイルを使用していますので
2つを動くようにマージする必要はあります
筆者は細かくは調べてませんが、
普通にhttp → https や www無し → wwwあり などの変換も行えますので
一般的なURLリダイレクトの動作は行なえます
なお、wwwありなし変換をやる場合はちゃんとカスタムドメインにwwwありを登録しておきましょう
なおhttp→https変換は以下の感じ
1.IISを普通に立ててRewriteModuleをインストール
2.Default Web Site を開いてからURL書き換えを開く

3.規則の追加

4.空の規則

5.以下入力
名前 :HTTPSリダイレクト
要求されたURL :パターンに一致する
使用 :正規表現
パターン :(.*)

6.条件を開いて以下追加
条件の入力 : {HTTPS}
入力文字列が次の条件を見対しているかどうかをチェック :パターンに一致する
パターン :OFF

7.アクションを開いて以下追加
アクションの種類 :リダイレクト
リダイレクトURL :https://{HTTP_HOST}/{R:1}
リダイレクトの種類 :永続的(301)

8.適用を押下

9.追加されています

10.デフォルト設定の場合「C:\inetpub\wwwroot\web.config」が作成されるので開く

11.以下のように入ってます
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="HTTPSリダイレクト" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="OFF" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
12./site/wwwroot に 作成したweb.config をコピー
ベーシック認証の設定がある場合は必要な値をマージします
マージの場合は記載箇所は<system.webServer>なので
一番下の行にある以下の中にマージ
<system.webServer> <modules> <add type="HttpAuthModule.HttpAuthModule" name="HttpAuthModule" /> </modules> </system.webServer>
こんな感じ
<system.webServer> <modules> <add type="HttpAuthModule.HttpAuthModule" name="HttpAuthModule" /> </modules> <rewrite> <rules> <rule name="HTTPSリダイレクト" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="OFF" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" /> </rule> </rules> </rewrite> </system.webServer>
13.httpsの強制化が行えました

当然、直接 web.config を弄ってもいいので
リダイレクト設定はやりやすいもので実施するのがいいかと