はじめに
App Serviceでは最後にスラッシュ「/」がある場合にはリダイレクトされることを解説しました。
-
App ServiceではURLの最後にスラッシュ「/」が無いとリダイレクトされてしまう。 - 技術的な何か。
はじめに App Serviceの特徴の一つとしてURLの最後にスラッシュ「/」が無い場合には、リダイレクトされて勝手にスラッシュ「/」が付きます。 これはドキュメントルートの下層ディレクトリで起こり
level69.net
単一のApp Serviceで運用する場合には、特に気にする必要はないと思います。
問題になってくるのはApplication GatewayのバックエンドにApp Serviceを指定した場合です。
図のように①でアクセスします。すると、App Service(バックエンド)は②で受け取ります。前回説明したように、App Serviceは最後のスラッシュ「/」がないためリダイレクトしようとします。この時、App ServiceはLocationヘッダーに自ドメイン aaa.azurewebsite.net
でリダイレクトしようとします。
すると、Application Gatewayからのみ通信を許可している場合にはApp Serviceへアクセスできず、403が表示されます。
curlで確認する
# curl -I https://www.server01.pw/bbb
HTTP/1.1 301 Moved Permanently
Date: Sun, 26 Dec 2021 14:08:11 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 169
Connection: keep-alive
Location: https://appsv000001.azurewebsites.net:443/bbb/
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Set-Cookie: ARRAffinity=4c11587e94349dd42c6fc02464b867022d6138c72620787a410e416b3ae10e84;Path=/;HttpOnly;Secure;Domain=appsv000001.azurewebsites.net:443
Set-Cookie: ARRAffinitySameSite=4c11587e94349dd42c6fc02464b867022d6138c72620787a410e416b3ae10e84;Path=/;HttpOnly;SameSite=None;Secure;Domain=appsv000001.azurewebsites.net:443
これは対策方法がドキュメントに記載されています。
-
Azure Application Gateway で HTTP ヘッダーと URL を書き換える | Microsoft Learn
この記事では、Azure Application Gateway での HTTP ヘッダーと URL の書き換えの概要を説明します
docs.microsoft.com
なんか長文で書かれていますが、スラッシュ「/」だけでなく、リダイレクト全般での対方法が書かれています。
リダイレクト URL を変更する
設定は、Application Gatewayの書き換えの設定を行います。
ドキュメントにも書かれていますが下記の設定を行います。
- パターン
(https?):\/\/.*azurewebsites\.net(.*)$ - ヘッダー値
{http_resp_Location_1}://contoso.com{http_resp_Location_2}
書き換えセットを作成します。
適用するルールは、大体は基本規則の部分だと思います。
書き換え規則の追加を行った後、条件の追加を行います。
Ifが追加されること確認します。
Ifをクリックして設定します。
次に、結果をクリックして設定します。
簡単に説明すると、応答ヘッダー(App Serviceがクライアントへ返すヘッダー)のLocationを書き換えています。
正規表現でかっこの中がそれぞれそのままヘッダー値となります。
(https?)→{http_resp_Location_1}
(.*)→{http_resp_Location_2}
それ以外、例では.*azurewebsites.net
をcontoso.com
に変換しています。
contoso.com
の部分を自分のドメインに変えます。
設定は以上です。
応答ヘッダーを書き換えた場合の動作は下記のようになります。
curlでヘッダーを確認すると
curl -I https://www.server01.pw/bbb
HTTP/1.1 301 Moved Permanently
Date: Sun, 26 Dec 2021 15:37:36 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 169
Connection: keep-alive
Location: https://www.server01.pw:443/bbb/
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Set-Cookie: ARRAffinity=4c11587e94349dd42c6fc02464b867022d6138c72620787a410e416b3ae10e84;Path=/;HttpOnly;Secure;Domain=appsv000001.azurewebsites.net:443
Set-Cookie: ARRAffinitySameSite=4c11587e94349dd42c6fc02464b867022d6138c72620787a410e416b3ae10e84;Path=/;HttpOnly;SameSite=None;Secure;Domain=appsv000001.azurewebsites.net:443
まとめ
他にも、App Serviceにカスタムドメインを割り当てる方法もありますが、運用面を考慮した場合、証明書の設定なども発生するので個人的にはお勧めできません。
今回はApplication GatewayのバックエンドにApp Serviceを設定した場合のリダイレクトの対策を紹介しました。
これは、前回のスラッシュ「/」の対策の場面でも使えます。むしろ必須作業ではないでしょうか。テストでは気づかない場合もあります。事前に対策を打つ方が得策なのではないでしょうか。