我在 Active Directory 域中有一个 Windows 2016 服务器 (FQDN:server1.domain)。我在 IIS 中托管内联网 Web 应用程序。
我最近在 DNS 中为该服务器创建了一个别名 (FQDN:CoolName.domain)。TLS 证书由内部证书颁发机构生成。在 IIS 中,我将端口 443 绑定到主机名CoolName.domain
和CoolName
证书。
我希望能够将我现有的应用程序从旧域名(即server1.domain/app1
)重定向到别名(即CoolName.domain/app1
),只要有人输入旧域名即可。如果他们使用 HTTP,则强制使用 HTTPS。
我尝试在 IIS 管理器中的服务器级别使用 HTTP 重定向模块并填写以下内容:
将请求重定向到此目的地:https://CoolName.domain
重定向行为:已检查
Redirect all requests to exact destination (instead of relative to destination)
然后按应用。
我所做的选项的图像参考:https://i.stack.imgur.com/vgPld.jpg
当我访问以下链接时,它们重定向失败:
http://server1
http://CoolName
http://CoolName.domain
http://server1.domain
最终仅重定向至https://CoolName.domain
。
当我尝试重定向任何超出域的 URL(例如)时http://CoolName.domain/app1
,它不会重定向。我尝试取消选中将所有请求重定向到确切的目的地(而不是相对于目的地)在#2中。
我的要求是否仅通过 HTTP 重定向就能实现?
答案1
我在最初的帖子中忘记提到我收到了与“HTTP 重定向过多”相关的错误。事实证明,启用 HTTP 重定向并重定向到同一个网站(即使使用不同的别名)将无休止地重定向。显然 IIS 不够智能,无法检测它是否重定向到同一个域。想想吧。我最终按照此处的说明解决了我的问题:https://stackoverflow.com/a/49460688
总结一下:您正在创建一个虚拟网站,并在 IIS 上绑定该网站上的所有端口 80 HTTP 流量,然后您可以重定向到原始 IIS 网站上配置的 HTTPS。具体操作如下:
- 默认网站 - 将所有 HTTP 流量绑定到非 80 的空闲端口(或者您可以删除 HTTP 绑定)。保留 HTTPS 绑定。
- 在 IIS (RedirectSite) 中创建一个新的网站:将所有 HTTP 流量绑定到端口 80。
- 在 DummySite 设置中,单击 HTTP 重定向。选中“将请求重定向到此目标”复选框;在目标 URL 字段中,输入带有 HTTPS 的完整域。例如。https://CoolName.domain。HTTP 代码 301。由于我想重定向与域相关的所有内容,因此无需选中其他框。请确保点击“应用”以保存设置。
应用设置后,如果您使用的是 Windows 身份验证,请等待几分钟以使更改生效。当我尝试重定向时,我遇到了身份验证错误 (HTTP 40x.x)。在测试链接之前,请清除客户端浏览器上的缓存。
测试。我最终使用了我最初帖子中的链接:
http://服务器1
http://酷名
这些链接最终应重定向至https://CoolName.domain。
如果适用的话,对于两个网站,附注如下:
确保 IIS_IUSRS 和 IUSR 对网站目录具有读取/执行权限。与 [Server_name]\Users 相同
仔细检查 Windows 身份验证是否配置正确