Appサービス

AppService周りをまとめてみる(Windows版)

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起動
シェル用のストレージディスクを指定して作成する場合は最初からちゃんと指定して間違えずに作成
今回は別件で作成済みなのでマウントされた状態です

001

2.FTPユーザ作成
以下実行

az webapp deployment user set --user-name shftproot --password ********
002

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

003

4.FTP接続
FTPソフト開いて以下入れます
今回はWinSCPを使用

ファイルプロトコル    :FTP
暗号化          :暗黙のSSL/TLSの暗号
ホスト名         :FTPSホスト名のFQDN部分
ユーザ名         :ポータルに表示されている FTP/デプロイユーザー名
パスワード        :CloudShellで入れたパスワード

004

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

006

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

006

カスタムドメインの登録

# Linux版の記事と同じ内容となってます

ここら辺はまだポータルだけからできますのでわかりやすいんですが一応

1.まずAzureDNSを作ります

008

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

009

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

010

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

011

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

012

6.AzureDNSだとこんな感じ

13

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

14

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

15

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

016

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

017

11.追加されました

018

BASIC認証の設定

ここら辺から情報が散らばってるので纏め…

まずWindowsの場合はIISなのでIISの基本認証を使用することになります
なお基本認証なのですが、WebApp単体だと必要なDLLがないのでかけれません

てことで…

以下、DLLを公開されている方がおられますのでこちらを使用
https://github.com/nabehiro/HttpAuthModule

PHPResources 配下のファイルをダウンロードします
素直にGit Bashで落としたほうがいいので全部ダウンロード

$ git clone https://github.com/nabehiro/HttpAuthModule.git
019

.\WebAppIISBasic\HttpAuthModule\PHPResources
にダウンロードした .\HttpAuthModule\PHPResources 配下のファイルを以下のように配置

/ ┐
 ├ APS.NET
 ├ LogFiles
 └ site ┬ deployments
     ├ locks
     ├ repository
     └ wwwroot ┬ bin ─ HttpAuthModule.dll
           ├ index.html
           └ web.config
020

一応このままで動きますが

<!-- [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書き換えを開く

021

3.規則の追加

022

4.空の規則

023

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

024

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

025

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

026

8.適用を押下

027

9.追加されています

028

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

029

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の強制化が行えました

030

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

AppService周りをまとめてみる(Linux版)前のページ

Azureで作るカスタムDNSの記事次のページ

関連記事

  1. Azure

    Azure Migrateを使ったIaaS移行

    はじめまして。新人クラウドエンジニアの三醍醐です。今回は、新機能が実…

  2. Azure

    Azure FilesをLinuxからマウントする記事

    皆様、こんにちは。在宅勤務による運動不足を解消するために縄跳びをやっ…

  3. Application Gateway

    L7 負荷分散 Azure Application Gateway について:2回目

    こんにちは。ヤモトです。今回はApplication Gateway…

  4. Azure

    Azure VPNについてあれこれ

    こんにちは、三醍醐です。今回は、Azure VPNについてお…

  5. Azure

    Azureの無料枠ためしてみた。

    目次1はじめに2Azureの無料枠試してみた2-1前…

  6. Application Gateway

    L7 負荷分散 Azure Application Gateway について:3回目

    こんにちは。ヤモトです。今回はApplication Gat…

関連記事

  1. Application Gateway

    L7負荷分散 Azure Application Gateway について:1回…
  2. Azure

    Azure料金に関する豆知識①
  3. Azure

    普通のAzure Windows VMを、従量課金のSQL VMにしたい
  4. Azure

    Azureで作るカスタムDNSの記事
  5. 未分類

    「Azure Functions」をC#で触ってみました。
PAGE TOP