【问题标题】:Enforce HTTPS in IIS without using cache unsafe server variables在不使用缓存不安全服务器变量的情况下在 IIS 中强制执行 HTTPS
【发布时间】:2021-09-22 15:34:10
【问题描述】:

我目前正在使用以下规则在网站上强制执行 https:

<rule name="Enforce HTTPS" enabled="true">
  <match url="(.*)" />
  <conditions>
    <add input="{HTTPS}" ignoreCase="true" pattern="^off$" />
  </conditions>
  <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>

问题是我在条件中使用的 HTTPS 服务器变量不是“不会对输出缓存策略造成任何影响”的服务器变量列表的一部分 (see full list)。

这是一个问题的原因是在设置了一些失败的请求跟踪规则之后,我意识到一些条目有以下警告:REWRITE_DISABLED_KERNEL_CACHE

经过一番研究,我发现了一个相关的forum thread 提到:

如果 URL 重写模块中的任何规则将禁用内核模式缓存 规则集有一个使用缓存不安全服务器变量的条件。这 无论请求的 URL 是否与 规则模式与否。

如果性能不是问题,这不会是问题,但网站不是那么快,我想知道这个缓存问题是否不是问题的一部分。

通过阅读安全变量列表,似乎没有包含用于请求的协议,所以这似乎是不可能的,但我仍然认为我可能会问以防万一。

【问题讨论】:

    标签: iis https url-rewriting iis-10


    【解决方案1】:

    遇到了同样的问题,并通过将 HTTP 流量路由到一个单独的 IIS 应用程序来解决这个问题,该应用程序只包含一个将流量路由到 HTTPS 应用程序的 web.config 文件。因此 HTTPS 应用程序中的 web.config 文件没有任何不安全的变量。

    【讨论】:

      【解决方案2】:

      我们可以绕过HTTP协议使用HTTPS访问网站,然后使用IIS日志查看网站的访问记录,其中每条记录都包含访问的时间消耗。

      Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs- 
      version cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken  
      
      2020-04-15 02:50:57 fe80::a4fe:6d79:f2b8:d031%6 GET / - 446 - 
      fe80::a4fe:6d79:f2b8:d031%6 HTTP/2 Mozilla/5.0+ 
      (Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+ 
      (KHTML,+like+Gecko)+Chrome/80.0.3987.163+Safari/537.36
      - 403 14 0 2158
      

      最后一个字段表示一个请求所花费的时间。
      仅检查 HTTPS 服务器变量并重定向 URI 时,我认为 IIS 输出缓存不会对 IIS 网站访问性能产生重大影响。

      【讨论】:

      • 谢谢,我很感激您的意见,我同意影响可能并不显着,但我将等待看看是否真的有原始问题的答案可以避免提及警告信息。
      猜你喜欢
      • 1970-01-01
      • 2021-11-12
      • 2015-10-17
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多