IIS 绑定、主机头与 SNI:一个 IP 托管多个站点
理解 IP:端口:主机头 绑定,添加多个 HTTP/HTTPS 站点,正确使用 SNI,并定位绑定冲突与证书名称错误。
测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1- 版本号
- 26100.33650
- 版本
- Standard / Datacenter
- 架构
- x64
- 支持
- 文档(E1)
- 证据
- E1官方文档
- 核验日期
- 2026-10-29
- 测试机
- IIS Manager UI 参考:VM 361 Windows 11 26H2;Lab 站点 :8080 绑定;Server 2025 cmdlet 为 E1
- 页面类型
- 任务
IIS 绑定是:
协议 IP:端口:主机头http *:80:lab.internalhttps *:443:lab.internal + SNI + 证书- IP 可以是
*(全部)、具体地址或通配。 - 端口区分端点,不是站点。
- 主机头让多个 HTTP 站点共享
*:80。 - SNI 让 HTTPS 也按主机名选证书;没有 SNI,一个 IP:端口只能有一张证书。
一个主机名一个站点,不要一个文件夹一个站点。同一主机下的路径用应用。
HTTP:主机头
Section titled “HTTP:主机头”Import-Module WebAdministrationNew-WebBinding -Name 'Lab' -Protocol http -Port 8081 -HostHeader 'lab.local'Get-WebBinding -Name 'Lab'在服务器上用 Host 头测试:
curl.exe -H "Host: lab.local" http://127.0.0.1:8081/不带头的 curl http://127.0.0.1:8081/ 可能落到另一个站点或默认站点。这就是“localhost 行、域名不行”的常见原因。
HTTPS:SNI
Section titled “HTTPS:SNI”没有 SNI 时,IIS 把证书绑到 IP:端口。有 SNI 时,客户端在 TLS 握手发主机名,IIS 选证书。
New-WebBinding -Name 'Lab' -Protocol https -Port 443 -HostHeader 'lab.example' -SslFlags 1SslFlags 1 表示启用 SNI。然后绑证书(哈希从 Get-ChildItem Cert:\LocalMachine\My 取):
netsh http add sslcert hostnameport=lab.example:443 ` certhash=<thumbprint> appid={4dc3e181-e14b-4a21-b022-59fc669b0914} ` certstorename=MYSNI 用 hostname:port。appid 是 IIS 用来标识绑定的任意 GUID;同一站点保持一致。
验证:
netsh http show sslcert hostnameport=lab.example:443curl.exe --resolve lab.example:443:127.0.0.1 https://lab.example/ -k--resolve 让测试打到本机 IIS,不管公网 DNS;-k 接受实验证书,生产不要养成习惯。
绑定是匹配,不是猜
Section titled “绑定是匹配,不是猜”HTTP:先匹配协议/端口/IP,再匹配 Host 头。没有主机头匹配时,可能落到无主机头的站点(常见 Default Web Site)。
HTTPS + SNI:主机名决定证书。不匹配会:
- 客户端证书名称警告(看到错误名字);
- 落到错误站点返回 404;
- 没有匹配的 SNI 绑定时握手失败。
| 现象 | 可能原因 |
|---|---|
| 400 Bad Request | 重复/非法绑定;主机头格式错 |
| 域名 404、localhost 200 | 请求落到 Default Web Site |
| 证书名称不匹配 | 证书 SAN 不含该主机名 |
| “文件已存在” | 同一 IP:端口:主机 重复绑定 |
| 只有一个站点 HTTPS 正常 | 没 SNI / 一个 IP:端口一张证书 |
| 内网行、外网不行 | DNS/防火墙/NAT,不是 IIS |
- 一个主机名一个站点;一个隔离边界一个应用池。
- HTTP 和 HTTPS 用同一主机名。
- 证书 SAN 覆盖该绑定的所有名字。
- Default Web Site 停掉或有意绑定。
- 用 Host 头/
--resolve测,不要只测localhost。 - 记录每个 IP:端口:主机 和证书指纹。
截图是 Windows 11 26H2、仅 HTTP、8080。HTTPS/SNI 与 Server 2025 角色行为是 E1,等 Server 2025 VM 和证书实验再升级。
