IIS 配置多域名泛解析详解
场景需求:
当您的服务器需要承载多个主域名(domain1.com
和 domain2.net
),且每个域名都需要支持无限子域名(如 *.domain1.com
, *.domain2.net
)访问时,IIS 结合泛解析 DNS 记录与正确绑定配置即可实现。
核心概念与前提条件
-
DNS 泛解析记录:
在域名管理平台为每个主域名添加一条A
记录或CNAME
记录:- 记录类型:
A
(指向服务器 IPv4) 或CNAME
(指向服务器主机名,如your.server.com
) - 主机记录/名称: (星号代表任意子域名)
- 记录值: 您的服务器公网 IP 地址 或 CNAME 目标地址。
- 效果: 所有指向
*.yourdomain.com
的请求将解析到您的服务器。
- 记录类型:
-
服务器端必备:
- IIS 版本: IIS 7 及以上(推荐 IIS 8.5+ 或 IIS 10,功能更完善)。
- 通配符证书 或 SNI 支持:
- 方案一(推荐): 为每个主域名申请并安装对应的通配符 SSL 证书(如
*.domain1.com
,*.domain2.net
)。 - 方案二(仅限 HTTPS): 若使用 IIS 8+ 且客户端浏览器较新,可利用 SNI (服务器名称指示),为不同域名绑定不同的独立证书(包括通配符或单域名证书)。
- 方案一(推荐): 为每个主域名申请并安装对应的通配符 SSL 证书(如
IIS 配置步骤详解(以 IIS 10 为例)
第一步:安装服务器证书
- 将每个域名的通配符证书文件(
.pfx
或.cer
+ 密钥)放置到服务器。 - 打开 IIS 管理器,点击左侧服务器节点。
- 双击中间功能视图的 “服务器证书”。
- 在右侧操作面板,点击 “导入…”。
- 选择证书文件,输入密码(如有),指定证书存储为 “个人”,点击确定,确保每个域名对应的证书成功出现在列表中。
第二步:配置网站绑定(核心)
目标: 创建能捕获所有域名请求的绑定规则。
-
定位站点:
- 若已有对应主站点的网站(例如物理路径指向主站应用),则在该站点上操作。
- 若需严格区分或新建,可创建一个新网站(如命名为 “CatchAll”),物理路径指向实际应用目录。
-
添加 HTTP 绑定(可选但建议保留):
- 右键点击目标站点,选择 “编辑绑定…”。
- 点击 “添加…”。
- 类型:
http
- IP 地址: 建议选择 “全部未分配” 或服务器具体 IP。
- 端口:
80
- 主机名: 留空 (这是关键!留空表示此绑定捕获所有到达该 IP 端口 80 的请求,无论请求的域名是什么)。
- 点击 “确定”。
-
添加 HTTPS 绑定(必须):
- 在 “绑定” 窗口中,再次点击 “添加…”。
- 类型:
https
- IP 地址: 同样选择 “全部未分配” 或服务器 IP。
- 端口:
443
- 主机名: 留空 (关键!捕获所有到达 443 端口的 HTTPS 请求)。
- SSL 证书:
- 如果使用通配符证书: 选择您为该站点主要服务的域名所对应的通配符证书(站点主要服务于
domain1.com
及其子域,则选择*.domain1.com
证书)。 注意: 一个 HTTPS 绑定只能关联一个证书,当请求其他域名的子域时,IIS 会尝试用此证书响应,可能导致浏览器证书不匹配警告。 - 如果使用 SNI 和多个证书: 选择您配置的第一个证书,SNI 允许在后续处理中根据请求的域名选择正确的证书。
- 如果使用通配符证书: 选择您为该站点主要服务的域名所对应的通配符证书(站点主要服务于
- 勾选 “需要服务器名称指示(SNI)” (如果您的 IIS 支持 SNI 且您计划为不同域名使用不同证书,强烈建议勾选)。
- 点击 “确定”。
- 重复添加绑定(仅限多通配符证书且无 SNI 或 SNI 不适用时): 如果服务器有多个 IP 地址,理论上可为每个域名分配独立 IP 并添加独立的 HTTPS 绑定(指定 IP 和对应证书),但此方法受 IP 资源限制,非主流方案。
第三步:应用程序处理请求
IIS 将所有请求(无论哪个子域名)路由到配置的网站后,应用程序代码需解析 HTTP_HOST
请求头:
// ASP.NET Core 示例 (Middleware/Controller 中) string requestedHost = HttpContext.Request.Host.Host; // sub1.domain1.com, subx.domain2.net
应用程序逻辑根据 requestedHost
判断请求指向哪个客户、租户或服务,动态加载对应配置或内容。

关键注意事项与优化
-
证书匹配优先级:
- 启用 SNI 后,IIS 能根据客户端请求的域名,自动选择该域名绑定的正确证书(需在绑定中指定),即使主机名留空,SNI 信息也会传递。这是实现多域名泛解析 HTTPS 的核心。
- 未启用 SNI 或客户端不支持: IIS 将使用绑定配置中指定的第一个证书响应所有请求,导致非证书对应域名的访问出现安全警告。
-
主机名留空的意义:
主机名
留空使绑定成为“默认”或“捕获所有”绑定,对于到达服务器指定 IP 和端口的请求,若没有其他绑定的主机名与之精确匹配,则该请求将由主机名留空的绑定处理,泛解析的请求正是没有预先定义的精确绑定,因此被此规则捕获。 -
应用程序框架支持: 确保应用程序具备基于主机名进行路由或租户识别的能力。
-
安全性:
- 防火墙: 仅开放必要的端口(80/443)。
- 请求过滤: 在 IIS 或应用中,可考虑对允许的域名后缀进行基础验证。
- 最小权限: 应用程序池运行账户权限应严格控制。
常见问题排查
- 访问出现证书错误(域名不匹配):
检查是否成功启用 SNI 并为每个域名配置了正确的证书绑定(主机名留空 + 选对证书 + 勾选 SNI),确认客户端浏览器支持 SNI,检查证书是否有效且包含请求的域名。 - HTTP 能访问,HTTPS 无法访问:
检查 443 端口是否在服务器防火墙开放并被监听 (netstat -ano | findstr :443
),确认 HTTPS 绑定已正确添加且证书无问题。 - 特定子域名无法访问:
检查 DNS 解析是否生效 (ping randomsub.yourdomain.com
看 IP 是否正确),检查应用程序日志,确认代码是否能正确获取并处理该主机名。
实现 IIS 多域名泛解析的核心在于 DNS 的泛记录指向服务器,以及在 IIS 中创建主机名为空的 HTTP/HTTPS 绑定来捕获所有请求,HTTPS 的成功关键在于通配符证书结合 SNI 技术,确保不同域名的请求能自动获得正确的证书响应,配置时需仔细核对证书安装与绑定设置,应用程序则需具备基于 Host
请求头动态响应的能力,做好安全加固,此方案能高效支撑多租户、多客户子域名场景。
