2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Application GatewayとApp Serviceに同じカスタムドメインを設定する

Last updated at Posted at 2024-09-01

Azure Application GatewayをReverse Proxyとしたときの問題点

Application Gatewayにwww.hoge.comなどのカスタムドメインを設定して、Backend Poolにはfuga.azurewebsites.netみたいなPrivate EndpointのFQDNを設定したい、、、というのが普通な考えに思えてしまうのだが。

実はそれだけだとリダイレクトの問題というのが発生してしまい、一筋縄ではいかないらしい。

要はクライアントからはApplication GatewayのFQDNにアクセスしているが、バックエンドプールには別のApp ServiceのFQDNでアクセスしている状態。その場合、WebAppsはPoolにはfuga.azurewebsites.netのようなFQDNでアクセスされることを期待しているのだが、実際はwwww.hoge.comのホスト名でアクセスされてしまい、リダイレクトが発生してしまう。最終的にユーザーにfuga.azurewebsites.netのURLが見えてしまうし、場合によってはApplication Gatewayをスキップしてそっちに直接アクセスしてしまう可能性がある。
image.png

一番簡単な解決策としてはホスト名の上書きというのがあるので、Application GatewayでバックエンドのHost名でで無理やり上書きにできる。それを有効にしてしまえばいいのだが、それはそれで問題が起こるときがある。

image.png

解決策

解決策としては先ほどの上のgithubのサポートブログにある通り、以下2種類。

カスタム ドメインをつかう
Application Gateway V1 SKU を利用の場合、または V2 SKU を利用しているものの referer ヘッダーや Cookie などにもドメインが含まれていて書き換えでの対応が複雑となる場合
 
Application Gateway の書き換え規則をつかう
Application Gateway V2 SKU を利用の場合で、Location ヘッダーのみの書き換えで対応が可能な場合

Microsoft推奨はカスタムドメインを設定する法なのだが、どうも手順が見つからない。いや、さっきのGithubのサポートブログに書いてあるのだが、自分の頭ではパッと理解できない。NW周り等慣れている人には当たり前なのかもしれないけど、苦戦してしまったのでメモを残す。

カスタムドメインをFrontとBack両方に設定する方法

Application GatewayとApp Serviceの両方に同じカスタムドメインを使う方法を試してみる。実際Microsoftのドキュメントではこれが推奨となっている。

image.png

やることとしては以下の感じで。

  • Application GatewayからWebAppsにPrivate Endpoint経由でアクセスしたい。
  • App Serviceは直接アクセスは不可にする。
  • Application Gatewayにはカスタムドメインでアクセスできるようにする。
  • Application GatewayとApp Service間もHTTPS化する。

参考:

やってみる

前提として

  1. お名前.comでsimari.xyzというドメインを取得しています。
  2. 証明書は高いので、自己署名証明書を利用します。
  3. 動作確認用に同じVNet内にVMを立てます。
  4. DNSを変更した後は適宜ipconfig /flushdnsが必要ですが、手順からは省いています。

Application GatewayとApp ServiceをPrivate Endpointでつなぐ

App Service のプライベートエンドポイントを作成します。これは以下のサイトに手順があったので、省略。

Private DNS Zone作成

今回取得したドメイン名と同じ名前でPrivate DNS Zoneを作成し、App ServiceのPrivate EndpointのIPに対してAレコードを作成します。

image.png

image.png

VNetにLink。
image.png

動作確認用VMからnslookupでwww.simari.xyzにアクセスしてみるとPrivate IPで解決されることを確認。
image.png

App Serviceにもカスタムドメインをセット

Domainにお名前.comで購入したドメインを入力すると、Validationのための値が出力される。
image.png

お名前.com側でレコード追加する。
image.png

image.png

DNSレコード設定を利用するを選択。
(ここは最低限TXTレコードだけあれば良い。実はこのApp Serviceに設定したカスタムドメインはPublic IPで解決するものなので、実際には使われないのだ。なんか裏技ぽい。)
image.png

image.png

少し時間がかかるが、これでAddできるようになる。
image.png

Bindingを追加

このままだとカスタムドメインは設定できたが、証明書が設定されていない状態。

image.png

自己署名証明書を作成

基本的には以下の手順に則ればOK。
注意点として、CNはカスタムドメイン名と同じ(今回はwww.simari.xyz)にしておく必要がある。

$cert = New-SelfSignedCertificate `
 -Subject "CN=www.simari.xyz" `
 -CertStoreLocation "Cert:\CurrentUser\My" `
 -KeyExportPolicy Exportable `
 -KeySpec Signature `
 -KeyLength 2048 `
 -KeyAlgorithm RSA `
 -HashAlgorithm SHA256

$cert | Format-List

# 秘密鍵なしのcer
Export-Certificate -Cert $cert -FilePath "C:\work\certificate2.cer"

$password = ConvertTo-SecureString -String "`{PASSWORD}" -Force -AsPlainText

# 秘密鍵ありのpfx
Export-PfxCertificate -Cert $cert -FilePath "C:\work\certificate2.pfx" -Password $password

Add binding

Add bindingから。本当はKV使ったほうがいいんだけど、力尽きたためUploadで。。
image.png

image.png

image.png

お名前.com側でApplication GatewayのPublic IPのAレコード追加

Application GatewayのPublic IPを確認。
image.png

お名前.comに追加。
これでApplication Gatewayもwww.simari.xyzでアクセスできるようになる。
image.png
(この時同時にさっき追加したApp Serviceのレコードを消しても良い。そう、App Serviceのお名前.comのDNSレコードはApp Serviceにカスタムドメインを設定したいから必要になっただけであって、Public IPで名前解決されることは一度もないので最終的に不要なのだ。)

Application GatewayのBackend settingsもCertificateを追加

App Serviceに設定したものと同じCertificateを追加。(※これはApplication GatewayからBackendの通信のためのCertificate。)
ここはOverride with new hostnameをNoにするのが大事。
image.png
image.png

ListenerにもCertificateを追加

image.png

Listener側にもCertificateを設定。
image.png

動作確認

Httpsで通信するhelath probeを設定して。
image.png

Backend healthでグリーンなことを確認。
image.png

VMからではなく、インターネット経由で設定したカスタムドメインにアクセスしてサイトが表示されることを確認。
image.png

最初に挙げたgithubのサポートブログのようにRedirectが走っていないのが確認できる。OK!
image.png

参考

未来の自分用メモとしてApplication gatewayの設定のスクショを残す。

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?