在IIS的相同端口和IP地址上运行多个网站
默认情况下,在IIS(Internet信息服务)服务器安装过程中,会创建一个空网站" Default"" Web"" Site",该网站在默认的" TCP 80" Web端口上响应。用IIS术语表示,该网站绑定到端口TCP/80。要打开网站,只需在浏览器中输入IIS服务器的名称(http:// web-srv1)或者其IP地址(http://10.10.0.88)。同一台IIS服务器可以支持数十个甚至数百个网站,并且可以运行多个在相同端口(80或者443)上侦听和响应的网站。但是,IIS管理器的接口并未表明我们可以托管另一个网站而无需将其绑定到其他端口(例如8080)。在本文中,我们将展示如何在同一IIS服务器上托管多个网站并将它们绑定到相同的端口和IP地址。
如前所述,单个IIS服务器可以承载多个网站,但是为了使IIS正确分发HTTP请求,必须使用每个唯一的值来标识每个网站。对于IIS网站,它由三个属性组成,这三个属性构成每个网站的唯一组合。这些是:
- TCP端口号
- IP地址
- 主机头
有关托管网站的信息以以下格式存储在IIS配置数据库的" ServerBindings"属性中:IP:端口:主机名。因此,如果要在同一端口和IP地址上托管多个网站,则必须使用唯一的Host标头。它是什么?主机标头是客户端发送到服务器的HTTP请求的一部分,该请求指定客户端将其定向到哪个网站。因此,必须在Web服务器的一侧指定此主机头,并且DNS包含与Web服务器的主机名和IP地址匹配的正确条目。
假设我们有一个在IIS上运行并侦听80端口的网站。并且我们需要将第二个网站绑定到同一端口。
在IIS管理器中,创建另一个名为TestSite的网站(" Add"网站),这些文件将位于c:\inetpub\TestSite中(尚未指定主机名)。
单击"确定"后,将出现一条警告,指出我们不能在两个站点上都使用绑定\:80。同时,其中只有一个可以工作。
同意此警告。因此,我们有另一个绑定到端口80的站点,我们必须先停止第一个站点才能启动它。
要创建唯一绑定,请为第二个网站指定另一个名称(主机名)。右键单击" TestSite",然后选择"编辑""绑定"。选择所需的绑定,然后单击"编辑"。
在"主机""名称"字段中指定用户要寻址的唯一主机名,例如TestSite。
我们可以在命令提示符下配置绑定。在这种情况下,对于IIS 7或者更高版本,用于配置绑定的命令如下所示:
C:\Windows\System32\inetsrv\appcmd.exe set site /site.name:"TestSite" /+bindings.[protocol='http',bindingInformation='*:80:TestSite']
现在,我们也可以启动第二个网站。
我们要做的就是将服务器(A或者CNAME)的别名添加到DNS中,以指定IP地址或者Web服务器的名称。
我们可以在DNS控制台(dnsmgmt.msc)中为名称TestSite创建一个CNAME条目,并将IIS服务器的域名指定为FQDN目标主机。
也可以使用PowerShell创建该条目:
Add-DnsServerResourceRecordCName -HostNameAlias web-srv1.contoso.loc -Name testsite -ZoneName contoso.loc
尝试在浏览器中打开http:// TestSite。它应该成功打开。
说明:
如果我们使用的是本地IIS服务器,则站点名称到服务器IP地址的映射是通过文件完成的
C:\Windows\system32\drivers\etc\hosts
绑定设置存储在IIS配置文件的IIS配置文件<sites>部分中
C:\Windows\System32\inetsrv\config\applicationHost.config
在我们的情况下,此部分包含以下数据:
<sites> <site name="Default Web Site" id="1"> <application path="/"> <virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" /> </application> <bindings> <binding protocol="http" bindingInformation="\*:80:" /> </bindings> </site> <site name="TestSite" id="2" serverAutoStart="true"> <application path="/" applicationPool="TestSite"> <virtualDirectory path="/" physicalPath="C:\inetpub\TestSite" /> </application> <bindings> <binding protocol="http" bindingInformation="\*:80:TestSite" /> </bindings> </site> <siteDefaults> <logFile logFormat="W3C" directory="%SystemDrive%\inetpub\logs\LogFiles" /> <traceFailedRequestsLogging directory="%SystemDrive%\inetpub\logs\FailedReqLogFiles" /> </siteDefaults> <applicationDefaults applicationPool="DefaultAppPool" /> <virtualDirectoryDefaults allowSubDirConfig="true" /> </sites>
同样,我们可以在IIS Web服务器的同一端口上托管和运行数百个站点。