我们已经使用 IIS 7.5 的应用程序初始化模块已经有一段时间了,它总是工作得很好。
但是,我们刚刚开始实施 SSL,它似乎与热身产生了冲突。我已经做了很多研究,但到目前为止还没有解决方案。
基本上问题是初始化模块不遵循重定向。我们必须为站点的某个部分启用 http,但我们会将所有其他 HTTP 访问重定向到它们的 HTTPS 等效项。我已经使用重写规则解决了这个问题,该规则会向 https 页面抛出 302。初始化接收到这个 302,但只是忽略它。
我尝试过的解决方案:
APP_WARMING_UP 服务器变量
这个最有意义。只要 {APP_WARMING_UP} 返回 1,我就可以简单地让重写规则忽略每个请求。根据文档,只要初始化仍在运行,它就会设置为 1。不幸的是,这根本不起作用,因为 {APP_WARMING_UP} 始终只返回一个空字符串。也许这是 7.5 的限制?(见下面我的重写规则。)
将初始化页面更改为 HTTPS 版本
目前它的配置如下:
<applicationInitialization remapManagedRequestsTo="Warmup.htm" skipManagedModules="true" doAppInitAfterRestart="true">
<add initializationPage="/WarmUp?id=1" />
</applicationInitialization>
我尝试将 URL 更改为“https://{HTTP_HOST}/Login/WarmUp?id=1”,甚至将 {HTTP_HOST} 替换为绝对地址,但两种配置似乎都完全禁用了应用程序初始化。它甚至不再发出页面请求。
这是关于模块的文档:
http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-application-initialization
这是我的重写规则,基本上是整个考验的罪魁祸首。这是唯一的一个。
<rule name="HTTP to HTTPS redirect" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{APP_WARMING_UP}" pattern="1" negate="true" />
<add input="{REQUEST_URI}" pattern="/services" negate="true" />
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" logRewrittenUrl="true" />
<serverVariables>
<set name="SKIP_MANAGED_MODULES" value="0" />
</serverVariables>
</rule>
有谁能帮忙吗?