web-dev-qa-db-ja.com

Verizonを使用したAzureCDN-常にindex.htmlをロードするようにURLを書き換えます


環境


私は過去数日間、次の問題に苦しんでいます。CDNの性質と新しいルールの手動レビューのため、新しいルールを展開するのに最大4時間かかります。

次のトピックで説明するように、私は現在、Angularアプリケーションをストレージアカウントにデプロイしています。このアカウントにはblobコンテナと呼ばれるcdnがあります。

enter image description here

このblobコンテナroot内で、私のangularプロジェクトからのdistフォルダー全体がCIセットアップを介してコピーされました。

enter image description here

CDNプロファイルも設定されており、_Origin-path_と呼ばれる_/cdn_を指します。

enter image description here


問題


残念ながら、現在進行中の issue があり、デフォルトのファイルに直接アクセスすることはできません。

  1. 私が欲しいのは、すべての着信トラフィックを私のAngularアプリケーションから_index.html_ファイルにリダイレクトすることです。これは Angularのルーティング を満たすためです。

    Input url with the expected output

  2. さらに、特定のURLを書き換えることなく、静的ファイル(画像など)のリクエストをすべて通過させたいと思います。

この問題に関するさまざまな投稿を見てきましたが、どの回答も私のケースをカバーしていないか、期待した結果が得られなかったようです。

現在、VerizonのAzure CDNrulesengines機能を使用しています。

パターンに関しては、コメントに記載されているものも含めて、 次の記事 に記載されているすべてのパターンを使用しました。

また、他のさまざまな記事やスタックオーバーフローの記事を見つけるために少なくとも2日を費やしましたが、私の場合はどれもうまくいきませんでした。

さらに、独自の正規表現パターンも作成しましたが、テスト環境では機能しましたが、CDNにデプロイされると機能します。

私は通常、次のいずれかの結果になりました。

  • トップレベルドメイン_https://myFancyWebsite.azureedge.net_はURLを_index.html_に書き換えず、httpエラー_404_を受け取ります
  • トップレベルドメインは_index.html_にリダイレクトされますが、URLパスを追加すると機能しなくなります_https://myFancyWebsite.azureedge.net/login/callback_-もう一度_404_を使い始めるとすぐにhttpエラー_/login/callback_
  • トップレベルドメインは、httpエラー_https://myFancyWebsite.azureedge.net/cdn/cdn/cdn/cdn/cdn/cdn/cdn/cdn/cdn/cdn ...._でURLを_431_のようなものに書き換えます。

Microsoftの公式 documentation も私の場合は役に立ちませんでした。

Angularアプリケーションをストレージアカウントにデプロイしているのは私が最初ではなく、誰かが私と同じ問題で実行されていると確信しています。

現時点では、ストレージアカウント全体の展開から離れることを確実に考えているため、正しい方向を示す情報に感謝しています。


アップデート1


次のsourceパターン_((?:[^\?]*/)?)($|\?.*)_は、ここの article でも言及されており、少なくともトップレベルドメインの_index.html_ファイルへの書き換えを処理できます。

残念ながら、_https://myFancyWebsite.azureedge.net/login/callback_から_https://myFancyWebsite.azureedge.net/index.html_にリダイレクトするための追加のパターンが必要です。


アップデート2


現在、正規表現パターンを1日に1〜2回更新していますが、テスト環境では機能しますが、デプロイすると機能しなくなります。 Azure CDNがトップレベルドメインの後にURLに何かを追加していると思い始めましたが、それを確認する方法がわかりません。

https://regex101.com/r/KK0jCN/2


アップデート3


私たちは3025年を書いていますが、たとえば次のパターンがトップドメインのURL書き換えを処理していない理由はまだわかりません。

https://regex101.com/r/KK0jCN/25

7
  • 条件付きの新しいルールを追加します常にの場合
  • エンドポイントごとに新しい機能を追加する必要があります。
  • パターンには、[^?.]*(\?.*)?$と入力します。このパターンは、.を含むURLパスをキャッチしますが、クエリ文字列に含まれているかどうかは関係ありません。
  • パスには、Origin_path/document.extと入力します。これは難しい部分です。パスは原点ルートを基準にしています。たとえば、CDNエンドポイントのオリジンパスが/Origin_pathで、index.htmlにリダイレクトする場合は、Origin_path/index.htmlと入力します。これは、CDNがAzureストレージアカウントによってサポートされており、オリジンがコンテナーを指している場合に常に当てはまります。
  • [追加]をクリックしてルールを追加し、N時間待つと、準備が整います。
12
Justin Gould

あなたの要件のために、私は私の側でこの問題をテストしました。私のテストによると、次のURL書き換えルールを活用してみることができます。

ソースパターン:(http[s]?://[^\?/#]+)(/(?!images)(?!scripts)[^\?#]*)?($|[\?#].*)

宛先パターン:$1/index.html$3

注:他のファイル(.ico、.txt、.js、.cssなど)を正しくロードするには、それらを新しい仮想ディレクトリに移動する必要がありますBLOBコンテナのルートの代わりに。たとえば、画像ファイルをcdn\imagesに移動し、JavaScriptファイルをcdn\scriptsに移動すると、正規表現は関連する仮想フォルダーを無視します。

さらに、Azure Web Appを使用して静的Webサイトをホストし、無料の価格階層または共有階層を選択できます。これにより、インスタンスあたり月額$ 9.49の費用がかかります。あなたが従うことができる詳細 価格計算機


更新:

Justinの回答に基づいて、この問題を確認したところ、Blobストレージのオリジンタイプの場合、URL書き換えのSourceDestinationがblobストレージエンドポイントに対するリクエストについて話していることがわかりました。したがって、blobエンドポイントのリクエストパスとクエリ文字列に対して正規表現を設定する必要があります。

Justin Gouldは、すべてをcdn/index.htmlに書き換えるための答えを提供しました。あなたのシナリオに基づいて、私は私のルールをテストしました、そしてそれは私の側で働くことができました。

enter image description here

テスト:

enter image description here

enter image description here

1
Bruce Chen