IIS 设置 HTTP 自动跳转 HTTPS

复核日期:2026-10-16。先确保 HTTPS 绑定和证书已经可用,再启用跳转;否则会把所有访问重定向到一个无法打开的地址。

配置前检查

  1. IIS 站点已经绑定正确的 80 和 443 端口。
  2. 443 绑定使用与域名匹配、未过期且证书链完整的证书。
  3. 已安装 Microsoft IIS URL Rewrite 2.0,并备份当前 web.config。
  4. 如果前面还有 CDN、WAF 或反向代理,确认它传递 X-Forwarded-Proto,避免重定向循环。

官方说明:Microsoft URL Rewrite Module

推荐的 web.config 规则

将以下规则放在站点根目录 web.config 的 system.webServer 中。已有 <rewrite> 节点时只合并 <rule>,不要复制两个 <rewrite> 节点。

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Redirect HTTP to HTTPS" stopProcessing="true">
          <match url="(.*)" />
          <conditions logicalGrouping="MatchAll">
            <add input="{HTTPS}" pattern="^OFF$" ignoreCase="true" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"
                  redirectType="Permanent" appendQueryString="true" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

初次上线可以先把 redirectType 改为 Found(302)验证,确认无误后再改为 Permanent(301),避免浏览器长时间缓存错误规则。

IIS 管理器图形界面

  1. 选择目标站点,确认“绑定”中同时存在 HTTP 与 HTTPS。
  2. 打开“URL 重写”,添加“空白规则”。
  3. 匹配 URL 使用 (.*);条件使用 {HTTPS} 匹配 ^OFF$。
  4. 操作选择“重定向”,目标为 https://{HTTP_HOST}/{R:1},并保留查询字符串。

原有界面参考图:

验证

curl.exe -I http://example.com/test?a=1
curl.exe -I https://example.com/test?a=1

第一个请求应返回 301/302 且 Location 保留路径和参数;第二个请求应正常返回,不能再次循环跳转。再检查证书域名、到期日及不同浏览器访问结果。

常见问题与回滚

  • 无限跳转:代理终止了 TLS,但 IIS 看到的仍是 HTTP。应按代理架构识别可信的转发协议,不能简单叠加规则。
  • 子应用异常:确认规则位于正确层级,必要时隔离子应用继承。
  • 内网健康检查失败:为明确的健康检查路径增加排除条件,避免全局绕过 HTTPS。
  • 回滚:恢复备份的 web.config,回收应用池并重新测试 HTTP/HTTPS。不要在未确认影响范围时直接删除整个配置文件。

HSTS 应在 HTTPS 全站稳定后再启用;包含子域名前要确认所有子域都支持 HTTPS。

Copyright © yan-jian.com 2023 - 2026 · Powered by GitBook更新时间: 2026-10-17 08:48:44

results matching ""

    No results matching ""