我們在 Azure 中有一個應用服務配置為最多 8 個實體,每次部署時,我們都會在可用性和性能(診斷)下看到重啟活動。
我們還觀察到這種情況發生的大量 5xx 錯誤。到目前為止,我們的分析是請求被路由到剛剛啟動的冷實體,這些都是失敗的原因。
我找到了本指南-> https://azure.github.io/AppService/2020/05/15/Robust-Apps-for-the-cloud.html并遵循應用程式初始化建議。
結果,我添加了
<applicationInitialization >
<add initializationPage="/healthcheck"/>
</applicationInitialization>
到 web.config
我重新啟動了應用服務并向應用發送了一些測驗請求。在 Application Insights 中,我可以看到正在呼叫運行狀況端點 - 因此應用程式初始化邏輯正在啟動。但是,它正在呼叫 http://localhost/healthcheck 并回傳 307。
我查看了 307 及其原因,它回傳 307,因為應用服務配置為僅使用 https 協議運行,但 http://localhost 不是 https,因此服務正在重定向。
我需要做什么才能使用 https 協議呼叫應用程式服務。
我嘗試在應用程式初始化塊中添加完整的應用程式 url,但我可以看到
http://localhost/https://app-service-name.azurewebsites.net/healthcheck 被呼叫 - 這更糟糕。
我究竟做錯了什么?
uj5u.com熱心網友回復:
預熱模塊使用 HTTP 而不是 HTTPS 發送請求。此行為是設計使然。建議的解決方法將允許從預熱模塊到 localhost 的 HTTP 請求,但對于其余請求,它將重定向到 HTTPS,因此這里的設計意味著預熱模塊通過 HTTP 發出請求。
要解決此限制,您可以考慮啟用 HTTP(取消選中 IIS 管理器 > SSL 設定下的 Require SSL 設定)并使用 URL 重寫規則將 HTTP 請求重定向到 HTTPS,但來自預熱模塊的請求除外:
<rewrite>
<rules>
<rule name="No redirect on warmup request (request from localhost with warmup user agent)"
stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="localhost" />
<add input="{HTTP_USER_AGENT}" pattern="Initialization" />
</conditions>
<action type="Rewrite" url="{URL}" />
</rule>
<rule name="HTTP to HTTPS redirect for all requests" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>
以上是我在微軟官方檔案中看到的。請參考這個。
真心希望能幫到你!
uj5u.com熱心網友回復:
您可能會關閉 HTTPS,并使用這些設定測驗您的應用程式。
要使用 Azure 門戶更改策略,請執行以下步驟:
- 在 https://portal.azure.com登錄 Azure 門戶。
- 導航到 應用服務。
- 對于每個應用程式,單擊應用程式。
a) 導航到 設定 部分。
b) 單擊 SSL 設定。
c) 導航到 協議設定 部分。
d) 將 HTTPS Only設定 為 OFF。
uj5u.com熱心網友回復:
我假設您的應用程式運行 ASP.NET Core。如另一個答案中所述,應用程式初始化僅支持 HTTP,因此您需要使其作業。我們所做的是這樣的:
/// </summary>
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
// IIS App initialization requires HTTP
app.UseWhen(
context => !WarmupController.IsWarmupRoute(context.Request.Path),
mainApp => mainApp.UseHttpsRedirection()
);
WarmupController.IsWarmupRoute
基本上只包含一張StartsWith
支票。
這樣,您只允許對您的預熱/健康檢查路由進行 HTTP 請求。無需調整web.config
或 AppService 設定。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/477892.html
上一篇:用于自旋向上和向下粒子的類?