如何在IIS7上复制/克隆网站

54

我希望复制我正在工作的iis网站的dev、demo1和demo2版本。我需要每个iis根据自己的代码库运行,但设置几乎相同。在Windows 7 Ultimate中,有没有简单的方法可以克隆我的dev iis到一个新站点,而不必完全重新配置它?为每个iis配置虚拟目录需要20分钟以上,因此这可以节省我很多工作。

4个回答

63

查看 ApplicationHost.config 文件。 它应该位于“c:\windows\system32\inetsrv\config”下。 这是一个包含所有IIS配置数据的XML文件。 您可以手动修改此文件以快速创建您网站的副本。 只需确保首先备份,以防出现问题。


1
哈哈,是的,我也有这个想法,但根据我的经验,触及那个文件可能会不可预测。克隆功能确实听起来像应该被支持的东西。不过我会备份并尝试一下的,谢谢 D。 - Agile Noob
我喜欢十年后回到这里,因为我忘记了如何做这件事。 - Mike Devenney

34

前往C:\Windows\system32\inetsrv\config,复制ApplicationHost.config文件。这是XML文件。打开它并进入<configuration><system.applicationHost><sites> ('configuration\system.applicationHost\sites'),找到您要复制的站点(它将与IIS管理工具中的名称相同),然后复制该站点部分并将其粘贴到<sites>下面,为新站点部分分配新的id和name属性,该属性尚未被使用过,例如:name="Test1" id="5".

 <site name="Test" id="4" serverAutoStart="true">
                <application path="/" applicationPool="Test">
                    <virtualDirectory path="/" physicalPath="C:\OnTheMove\tags\Release 2.1.7.7\Offline\OfflineRouteHandler" userName="administrator" password="[enc:AesProvider:K0YvJ9r+XXNP8VUrZlbCPQ==:enc]" />
                </application>
                <application path="/Offline_Tablet" applicationPool="Test">
                    <virtualDirectory path="/" physicalPath="C:\OTM\Offline\OnTheMoveOffline" userName="administrator" password="[enc:AesProvider:tT9uIWQDtIZTRnSMmx8XmIQv0lr7AbUXcuGby5qRZSo=:enc]" />
                </application>
                <application path="/OnTheMoveWebFiles" applicationPool="Test">
                    <virtualDirectory path="/" physicalPath="C:\OTM\Offline\OnTheMoveOffline\OnTheMoveWebFiles" userName="administrator" password="[enc:AesProvider:zZgL59H6ka6jehb9BPTaNR8ogdgc8S90c3vf8p6MjPc=:enc]" />
                </application>
                <application path="/eai_enu" applicationPool="Test">
                    <virtualDirectory path="/" physicalPath="C:\OTM\Offline\OfflineRouteHandler" userName="administrator" password="[enc:AesProvider:MfaNJz14gaJK5EjgIqhj4w==:enc]" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="*:80:" />
                </bindings>
            </site>

会被复制。

<site name="Test1" id="5" serverAutoStart="true">
            <application path="/" applicationPool="Test">
                <virtualDirectory path="/" physicalPath="C:\OnTheMove\tags\Release 2.1.7.7\Offline\OfflineRouteHandler" userName="administrator" password="[enc:AesProvider:K0YvJ9r+XXNP8VUrZlbCPQ==:enc]" />
            </application>
            <application path="/Offline_Tablet" applicationPool="Test">
                <virtualDirectory path="/" physicalPath="C:\OTMTrunk\Offline\OnTheMoveOffline" userName="administrator" password="[enc:AesProvider:tT9uIWQDtIZTRnSMmx8XmIQv0lr7AbUXcuGby5qRZSo=:enc]" />
            </application>
            <application path="/OnTheMoveWebFiles" applicationPool="Test">
                <virtualDirectory path="/" physicalPath="C:\OTMTrunk\Offline\OnTheMoveOffline\OnTheMoveWebFiles" userName="administrator" password="[enc:AesProvider:zZgL59H6ka6jehb9BPTaNR8ogdgc8S90c3vf8p6MjPc=:enc]" />
            </application>
            <application path="/eai_enu" applicationPool="Test">
                <virtualDirectory path="/" physicalPath="C:\OTMTrunk\Offline\OfflineRouteHandler" userName="administrator" password="[enc:AesProvider:MfaNJz14gaJK5EjgIqhj4w==:enc]" />
            </application>
            <bindings>
                <binding protocol="http" bindingInformation="*:80:" />
            </bindings>
        </site>

打开IIS管理工具,如果一切顺利,会有一个新的已停止的网站。

enter image description here
如果失败,请使用备份副本覆盖ApplicationHost.config

更新:根据评论,如果您正在使用64位环境编辑 ApplicationHost.config,则需要使用以管理员模式运行的64位编辑器之一,例如记事本

摘自这里

希望能为您节省一些时间。


2
听起来在64位环境下有两个ApplicationHost.config的副本(分别位于system32SysWOW64下),但它们链接到同一个文件。然而,当我添加了我需要克隆的应用程序池和站点的副本后,在IIS管理器中什么也没有改变——没有新的池,也没有新的站点。 - ajeh
3
一样的,这太疯狂了。在一台64位的服务器上,唯一有效的方法就是使用基本的Windows记事本编辑"system32\ApplicationHost.config"文件。 - BufferUnderRun
1
更具体地说,您需要在64位服务器上使用64位编辑器。否则,它不会更新更改。参考:http://www.beacontechnologies.com/blog/2014/06/why-are-changes-to-my-applicaionhost-config-not-showing-up-in-iis/ - Jurijs Kastanovs
@JurijsKastanovs 谢谢,已添加至答案 - 这样它就不会在评论中丢失了。 - Matas Vaitkevicius

7
实际上,上面的答案——编辑ApplicationHost.config只是工作的一半。您还需要将新的AppPools添加到applicationPools节点中。
因此:
1/. 如其他人所提到的首先要复制您的ApplicationHost.config文件!! 我通常会复制并重命名为“ApplicationHost_BACKUP_YYYY_MM_DD.config”
2/. 使用记事本(Windows的最佳选项,以减轻32位与64位之间的问题)。搜索要复制的站点,查找(在我的情况下)'id="13"'。一旦找到要复制的站点,请复制整个节点,并将其粘贴到已复制的站点后面。给它一个新ID。请务必先检查IIS中使用的所有ID的站点!!还要确保为其提供新名称,并更新复制部分中的所有路径和应用程序池。参见下面的示例。
要复制的站点(当前):
<site name="Reading List" id="13" serverAutoStart="true">
     <application path="/" applicationPool="Reading List">
         <virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot\reading_list\http" />
     </application>              
     <bindings>
          <binding protocol="http" bindingInformation="*:80:readinglist.jsgroup.local" />
     </bindings>
</site>

复制网站(新):

<site name="Reading List" id="14" serverAutoStart="true">
  <application path="/" applicationPool="Reading List 2">
      <virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot\reading_list_2\http" />
 </application>              
 <bindings>
     <binding protocol="http" bindingInformation="*:80:readinglist2.jsgroup.local" />
 </bindings>
</site>

3/. 在应用程序池节点中添加新的Apppools,配置与上面复制的站点相同,例如,我已经复制了“阅读列表”应用程序池,并将其重命名为“阅读列表2”

<applicationPools>
    <add name="DefaultAppPool" autoStart="true" managedRuntimeVersion="v4.0">
         <processModel identityType="ApplicationPoolIdentity" />
    </add>
    <add name="Reading List" autoStart="true" managedRuntimeVersion="v4.0" />
    <add name="Reading List 2" autoStart="true" managedRuntimeVersion="v4.0" />
    <!-- Other AppPools here -->
 </applicationPools>

如果一切正常,可以在IIS中查看站点,并在需要时重新启动 :-)
希望对某些人有所帮助。
Richard Hetherington

还要注意,在applicationHost.config中可能有更多的设置需要复制,例如<location path="mywebsite.com"> <system.webServer> <security> <authentication> <anonymousAuthentication enabled="false" /> <windowsAuthentication enabled="true" /> </authentication> </security> </system.webServer>如果您使用不同的身份验证设置。 - Matt

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接