6

我们已经使用 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>

有谁能帮忙吗?

4

1 回答 1

12

可能会有所帮助。该模块似乎不适用于需要 SSL 的站点。请参阅此知识库问题。我猜模块踢的是http请求而不是https。

您可能想要创建一个允许 http 并且不重定向到 https 的页面。

于 2013-09-29T00:27:24.597 回答