我想指向用户 test1.domain.com test2.domain.com 等,而无需在 IIS7 中手动添加标头绑定。这可能吗?如果不能自动添加,我可以通过编程方式添加主机标头吗?
答案1
是的你可以。
可以使用通配符 SSL 证书和单个 IP。
我可以详细说明如何使用自签名通配符来测试这一点。
先决条件
- MakeCert.exe(应该是 Visual Studio 安装的一部分或可在此处下载)
- winhttpcertcfg.exe(可在此处下载)
- APPCMD(Vista/Server 2008/Windows 7 的一部分)
- 使用 MMC 的个人和本地计算机的“证书”管理单元
方法
从命令提示符执行以下命令
makecert -r -pe -n CN=*.domain.com -ss my -sr currentuser -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12 wildcard.domain.cer
然后
- 从 RUN 命令或开始菜单中,键入 MMC
- 文件 > 添加或删除管理单元 - 选择证书,单击添加,选择我的用户帐户,单击完成
- 重复上一步并选择我的电脑(然后选择本地计算机)
- 单击“确定”
- 展开证书 - 当前用户 > 个人 > 证书
- 右键单击 *.domain.com,然后选择“所有任务”>“导出”。PFX 文件包含此证书的公钥和私钥,因此要求输入密码。
- 将证书从当前用户 > 个人 > 证书复制或移动到本地计算机 > 受信任的根证书颁发机构 > 证书
- 将 PFX 导入本地计算机 > 个人 > 证书(这将是您的 Web 服务使用的证书。
现在让我们创建你的 Web 服务器
- 整理你的环境:)
删除现有的演示应用程序池和站点
%windir%\system32\inetsrv\Appcmd delete site "Demo 1"
%windir%\system32\inetsrv\Appcmd delete site "Demo 2"
%windir%\system32\inetsrv\Appcmd delete AppPool "Demo 1 App Pool"
%windir%\system32\inetsrv\Appcmd delete AppPool "Demo 2 Portal App Pool"
- 建立SSL环境
告诉 Windows 网络服务被允许访问你的通配符证书。并告诉它将证书绑定到你的 IP 地址上的端口 443
PathToWinHTTPCertCfg\winhttpcertcfg -g -i "wildcard.domain.com.pfx" -c LOCAL_MACHINE\My -a “Network Service” -p MySecretPassword
netsh http add sslcert ipport=<YOURLOCALIPADDRESS>:443 certhash=<CERTIFICATE THUMBPRINT> appid=<A GUID IN THE FORM OF {ab3c58f7-8316-42e3-bc6e-771d4ce4b201}>
- 创建应用程序池和站点
这是创建应用程序池和站点的代码
%windir%\system32\inetsrv\Appcmd add site -id:100 -name:"Demo 1" -bindings:http/*:80:YOURLOCALIPADDRESS -physicalPath:<PathToDemo1Source> -logfile.directory:<PathToPutLogFilesIn> -traceFailedRequestsLogging.directory:<PathToPutTraceFiles>
%windir%\system32\inetsrv\Appcmd set app "Demo 1/" -applicationPool:"Demo 1 App Pool"
%windir%\system32\inetsrv\Appcmd set site /site.name:"Demo 1" /+bindings.[protocol='https',bindingInformation='*:443:demo1.domain.com']
%windir%\system32\inetsrv\Appcmd add site -id:200 -name:"Demo 2" -bindings:http/*:80:YOURLOCALIPADDRESS -physicalPath:<PathToDemo2Source> -logfile.directory:<PathToPutLogFilesIn> -traceFailedRequestsLogging.directory:<PathToPutTraceFiles>
%windir%\system32\inetsrv\Appcmd set app "Demo 2/" -applicationPool:"Demo 2 App Pool"
%windir%\system32\inetsrv\Appcmd set site /site.name:"Demo 2" /+bindings.[protocol='https',bindingInformation='*:443:demo2.domain.com']
...那应该是你 ;) 享受吧!
答案2
据我所知,IIS7 中的主机头只有两个选项。
- 您可以为每个想要处理的域设置主机头/类型/端口/ip。
- 您没有设置主机头,但在想要处理多个域的网站上包含类型/端口/ip。
选项 2 的缺陷是它会响应该端口上的任何请求,并且您将无法在没有主机头的情况下在另一个站点上使用同一端口。
您可能可以在服务器级别加载 ISAPI 过滤器,以便在请求到达处理的主机头部分之前拦截它,但设置一个脚本来处理选项#1 可能会更容易。
答案3
通过设置通配符 DNS 条目,您可以让任意多个名称进入您的默认网站。一旦用户访问该网站,如果您需要将其重定向到另一个网站,请让您的 default.asp 文件查找 HOST 标头以确定是否需要重定向,否则,继续加载网站的其余部分。
参考:
我不太擅长 Web 开发,但这至少可以帮你入门。