我有一个简单的 Umbraco 7.7.2 应用程序,并将其托管在 Azure(应用程序服务)上。当我重新启动服务器时,第一次请求页面需要 20-40 秒,这真的很烦人,特别是当负载很高并且您处于横向扩展以减少响应时间。
我已经在 webconnfig 中尝试过此设置,但似乎不起作用。
<system.webServer>
<applicationInitialization>
<add initializationPage="/page1/?warmup=1" hostName="mydomain.com" />
<add initializationPage="/page1/page2/?warmup=1" hostName="mydomain.com" />
</applicationInitialization>
</system.webServer>
我可能以错误的方式尝试,但我所做的是重新启动服务器,并且我已经将其保留了 2-3 分钟而没有请求任何页面。
我检查了我的 Umbraco 日志,发现该应用程序甚至没有启动。
然后我请求了主页,花了 40 秒才出现。
然后我尝试了 mydomain.com/page1,由于这是第一个访问它的请求,也花了 20 秒。
*P.S: 第一次请求后,网站速度非常快,每个页面加载时间不到 100 毫秒
Update
我已经按照凯文的建议进行了重写以停止下一个重定向。
结果,我的 Umbraco 将启动,但请求仍然无法到达页面。
在我的母版页上,我添加了一行,如果查询字符串中有预热,则在日志中写入一行,并且从浏览器点击页面时可以正常工作:
if (!string.IsNullOrWhiteSpace( Request.QueryString["warmup"]))
{
var pageC = Model.Content;
logger.Info(pageC.UrlAbsolute()+" "+ Request.QueryString);
}
但是,之后我的日志中没有任何内容
2018-02-08 15:16:51,245 [P7036/D2/T1] INFO Umbraco.Core.CoreBootManager - Umbraco 应用程序启动完成(花费了 12727ms)
2018-02-08 15:16:54,911 [P7036/D2/T1] INFO MyNamespace.Web.CustomStartup - 基本配置完成!
这是我根据凯文的回答添加的内容:
<rule name="No redirect on warmup request (request from localhost with warmup user agent)" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{REMOTE_ADDR}" pattern="127.0.0.*" />
</conditions>
<action type="Rewrite" url="{URL}" />
</rule>
另外,我在微软上找到了另一个类似的配置:
<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>